解析包含字典的JSON数组

3
我是一名新手,对于解析JSON和使用Restful API还不是很熟悉。虽然我已经为这个问题查找了大量资料,但我仍然无法理解。
我想要解析的JSON数据是:http://jsonplaceholder.typicode.com/users
guard let url = URL(string: "http://jsonplaceholder.typicode.com/users/") else {return}
    let session = URLSession.shared

    session.dataTask(with: url) { (data, response, error) in
        if error != nil {
            print(error ?? "")
        }
        if data != nil {
            do{
                let json = try JSONSerialization.jsonObject(with: data!, options: .mutableLeaves)

                guard let idk = json as? [Dictionary<String, Any>] else {return}

               print(idk)
            }
            catch{
                print(error)
            }
        }
    }.resume()

我到这里卡住了,无法继续。例如,我想获得id、name和username,但我不知道该怎么做了。如果我想深入Address字典,我会怎么做呢?


请看我的答案,了解如何解析JSON响应:https://stackoverflow.com/questions/42736798/how-to-parse-json-code-to-swift-3-table-view-data/42743790#42743790 - fja
使用Alamofire并将字典任何对象作为JSON结果传递,内部数组作为!字符串传递,在您的数组中附加项。它应该明确更好地打印JSON数组的完整结果。 - ronak patel
2个回答

5
这是一个示例,展示了如何读取数据:
for data: Dictionary<String, Any> in idk{
        if let address = data["address"] as? Dictionary<String, Any>{
                //here the data in address: { .. } is available
                //for example
                print(address["city"] ?? "")
        }

        //or id
        print(data["id"] ?? "")

        //username
        print(data["username"] ?? "")
}

这对我有用,我理解了逻辑。但是数据:Dictionary<String, Any> 在这里发生了什么?我删除了这行代码,它仍然可以工作? - Alper
1
它就像编译器的定义助手,但并非必需。 - Vasil Hristov
如果地址字典是一个数组会发生什么?我应该使用什么来代替 Dictionary<String, Any>? - Alper
1
在这种情况下,您必须使用[Dictionary<String, Any>]。 - Vasil Hristov

1

Alper,为什么不使用SwiftyJSON来实现这个。下载cocoa pod并按照他们的Github页面上的说明操作:https://github.com/SwiftyJSON/SwiftyJSON

解析将变得非常简单。似乎在Swift 4中,JSON的处理更好,像SwiftyJSON这样的库将不再需要。


我对SwiftyJSON和Alamofire很熟悉,但我正在努力理解解析JSON的逻辑。例如,数组中有字典,只有字典,还有字典中嵌套字典,我正试图理解如何使用它们。 - Alper

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接