首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >解析JSON Swift 3

解析JSON Swift 3
EN

Stack Overflow用户
提问于 2016-09-16 02:08:39
回答 2查看 345关注 0票数 0

我一整天都在寻找这个问题的答案,我快要崩溃了,但是有没有人可以告诉我或者告诉我如何解析这个JSON文件,这样我就可以访问第一个“成员”数组并打印出所有成员的名字?我现在查看的所有信息在Swift 3中都不起作用(!)。

JSON文件:

代码语言:javascript
复制
    [
    {
        "id" : "001",
        "firstName" : "Mark",
        "lastName" : "Mason",
        "role" : "CEO",
        "profileImageURL" : "http://developers.mub.lu/resources/profilePlaceholder.png"
    },
    {
        "teamName" : "iOS",
        "members" : [
            {
                "id" : "002",
                "firstName" : "Olly",
                "lastName" : "Berry",
                "role" : "iOS Team Lead",
                "profileImageURL" : "http://developers.mub.lu/resources/profilePlaceholder.png",
                "teamLead" : true
            },
            {
                "id" : "003",
                "firstName" : "James",
                "lastName" : "Frost",
                "role" : "iOS Developer",
                "profileImageURL" : "http://developers.mub.lu/resources/profilePlaceholder.png"
            },
            {
                "id" : "004",
                "firstName" : "Liam",
                "lastName" : "Nichols",
                "role" : "iOS Developer",
                "profileImageURL" : "http://developers.mub.lu/resources/profilePlaceholder.png"
            },
            {
                "id" : "005",
                "firstName" : "Chris",
                "lastName" : "Watson",
                "role" : "iOS Developer",
                "profileImageURL" : "http://developers.mub.lu/resources/profilePlaceholder.png"
            },
            {
                "id" : "006",
                "firstName" : "Richard",
                "lastName" : "Turton",
                "role" : "iOS Developer",
                "profileImageURL" : "http://developers.mub.lu/resources/profilePlaceholder.png"
            },
            {
                "id" : "007",
                "firstName" : "Matt",
                "lastName" : "Colliss",
                "role" : "iOS Developer",
                "profileImageURL" : "http://developers.mub.lu/resources/profilePlaceholder.png"
            },
            {
                "id" : "008",
                "firstName" : "David",
                "lastName" : "Gibson",
                "role" : "iOS Developer",
                "profileImageURL" : "http://developers.mub.lu/resources/profilePlaceholder.png"
            },
            {
                "id" : "009",
                "firstName" : "Tom",
                "lastName" : "Guy",
                "role" : "iOS Developer",
                "profileImageURL" : "http://developers.mub.lu/resources/profilePlaceholder.png"
            },
            {
                "id" : "010",
                "firstName" : "Rich",
                "lastName" : "Hodgkins",
                "role" : "iOS Developer",
                "profileImageURL" : "http://developers.mub.lu/resources/profilePlaceholder.png"
            }
        ]
    },
    {
        "teamName" : "Android",
        "members" : [{
                "id" : "011",
                "firstName" : "David",
                "lastName" : "Branton",
                "role" : "Android Team Lead",
                "profileImageURL" : "http://developers.mub.lu/resources/profilePlaceholder.png",
                "teamLead" : true
            },
            {
                "id" : "012",
                "firstName" : "Dre",
                "lastName" : "Pilipczuk",
                "role" : "Android Developer",
                "profileImageURL" : "http://developers.mub.lu/resources/profilePlaceholder.png"
            },
            {
                "id" : "013",
                "firstName" : "Ray",
                "lastName" : "Britton",
                "role" : "Android Developer",
                "profileImageURL" : "http://developers.mub.lu/resources/profilePlaceholder.png"
            },
            {
                "id" : "014",
                "firstName" : "Charly",
                "lastName" : "Murillo",
                "role" : "Android Developer",
                "profileImageURL" : "http://developers.mub.lu/resources/profilePlaceholder.png"
            }
        ]   
    },
    {
        "teamName" : "Web",
        "members" : [{
                "id" : "015",
                "firstName" : "Ryan",
                "lastName" : "French",
                "role" : "Web Team Lead",
                "profileImageURL" : "http://developers.mub.lu/resources/profilePlaceholder.png",
                "teamLead" : true
            },
            {
                "id" : "016",
                "firstName" : "James",
                "lastName" : "Ward",
                "role" : "Web Developer",
                "profileImageURL" : "http://developers.mub.lu/resources/profilePlaceholder.png"
            },
            {
                "id" : "018",
                "firstName" : "Adam",
                "lastName" : "Smith",
                "role" : "Web Developer",
                "profileImageURL" : "http://developers.mub.lu/resources/profilePlaceholder.png"
            },
            {
                "id" : "019",
                "firstName" : "Leonard",
                "lastName" : "Da Costa",
                "role" : "Web Developer",
                "profileImageURL" : "http://developers.mub.lu/resources/profilePlaceholder.png"
            }
        ]   
    },
    {
        "teamName" : "Design",
        "members" : [{
                "id" : "020",
                "firstName" : "Hannah",
                "lastName" : "Tempest",
                "role" : "Design Team Lead",
                "profileImageURL" : "http://developers.mub.lu/resources/profilePlaceholder.png",
                "teamLead" : true
            },
            {
                "id" : "021",
                "firstName" : "Ellis",
                "lastName" : "Reed",
                "role" : "Designer",
                "profileImageURL" : "http://developers.mub.lu/resources/profilePlaceholder.png"
            },
            {
                "id" : "022",
                "firstName" : "Pete",
                "lastName" : "Horsham",
                "role" : "Designer",
                "profileImageURL" : "http://developers.mub.lu/resources/profilePlaceholder.png"
            },
            {
                "id" : "023",
                "firstName" : "Hemel",
                "lastName" : "Dave",
                "role" : "Designer",
                "profileImageURL" : "http://developers.mub.lu/resources/profilePlaceholder.png"
            },
            {
                "id" : "024",
                "firstName" : "Hannah",
                "lastName" : "Corke",
                "role" : "Designer",
                "profileImageURL" : "http://developers.mub.lu/resources/profilePlaceholder.png"
            }
        ]   
    }
]

我一直收到错误‘类型’任何‘没有下标成员’,我只是不知道该怎么做。我对数据进行了如下解析:

代码语言:javascript
复制
    let urlString = "url of the json file"

            let url = URL(string: urlString)
            URLSession.shared.dataTask(with:url!, completionHandler: {(data, response, error) in
                if error != nil {
                    print(error)
                } else {
                    do {

                        let parsedData = try JSONSerialization.jsonObject(with: data!, options: .mutableContainers) as! NSMutableArray 
} catch let error as NSError {
                        print(error)
                    }
                }

            }).resume()

但是我不知道如何访问单独的数组和字典。

谢谢你!!

EN

回答 2

Stack Overflow用户

发布于 2016-09-16 09:20:30

因为您的数组包含格式不同的项。第一项包含CEO信息,其余项包含团队信息。

您可以通过检查当前项目是CEO或团队来解析它们

这是您在Swift3中的解析代码

代码语言:javascript
复制
do {
    if let parsedData = try JSONSerialization.jsonObject(with: data!, options: .mutableContainers) as? [[String: AnyObject]] {
        // parse data here
        for item in parsedData {
            if let ceoFirstName = item["firstName"] as? String { // first item is CEO info. You can get more info like id, lastName, role, profileImageURL here
                print("CEO firstName is \(ceoFirstName)")
            }
            if let teamName = item["teamName"], members = item["members"] as? [[String: AnyObject]] { // rest items are teams
                print("all members firstName from team \(teamName):")
                for member in members { // loop for all members
                    if let firstName = member["firstName"] as? String {
                        print("firstName = \(firstName)")
                    }
                    // you can get other member info like id, lastName, role, profileImageURL, teamLead here
                }

            }
        }

    }
} catch {
    print(exception)
}

结果:

代码语言:javascript
复制
CEO firstName is Mark
all members firstName from team iOS:
firstName = Olly
firstName = James
firstName = Liam
firstName = Chris
firstName = Richard
firstName = Matt
firstName = David
firstName = Tom
firstName = Rich
all members firstName from team Android:
firstName = David
firstName = Dre
firstName = Ray
firstName = Charly
all members firstName from team Web:
firstName = Ryan
firstName = James
firstName = Adam
firstName = Leonard
all members firstName from team Design:
firstName = Hannah
firstName = Ellis
firstName = Pete
firstName = Hemel
firstName = Hannah
票数 2
EN

Stack Overflow用户

发布于 2017-05-16 18:40:54

代码语言:javascript
复制
let urlpath : String = "http://..."

let url = URL(string: urlpath)

var urlrequest = URLRequest(url: url!)

urlrequest.httpMethod = "GET"

let config = URLSessionConfiguration.default
let session = URLSession(configuration: config)

let task = session.dataTask(with: urlrequest) { (data, response, error) in

    do {

        guard let getResponseDic = try JSONSerialization.jsonObject(with: data!, options: []) as? [String: AnyObject]
            else
        {
            print("error trying to convert data to JSON")
            return
        }
        // now we have the todo, let's just print it to prove we can access it

        print(getResponseDic as NSDictionary)

        let dic = getResponseDic as NSDictionary
        let msg = dic.object(forKey: "message")

        print(dic)
        let arrObj = dic.object(forKey: "teacherDetail") as! NSArray
        print(arrObj)

        // let arr = dic.value(forKey: "TeacherName")as! NSArray

        print(((dic.value(forKey: "teacherDetail") as! NSArray).object(at: 0) as! NSDictionary).value(forKey: "TeacherName") as! String)


        // the todo object is a dictionary
        // so we just access the title using the "title" key
        // so check for a title and print it if we have one

        // print("The title is: " + todoTitle)
    } catch  {
        print("error trying to convert data to JSON")
        return
    }

}

task.resume()
票数 -3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39517657

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档