ios - 当对象包含其他对象的数组时,如何解析 JSON?

标签 ios arrays json swift

我一直在尝试在 Swift 中解析 JSON,其中对象包含其他对象的数组。像这样:

{
  "people": [
    {
      "name": "Life Sciences",
      "id": "4343435",

      "children" : [
        {
          "name": "name1",
          "id" : "5344444",
        },

        {
          "name": "name2",
          "id" : "5134343",
        },
      .....

我需要能够访问 name 和 id 属性,但我似乎无法弄清楚我在下面的代码中做错了什么。我的 JSON 文件包含所有必要的数据,但是,当我尝试遍历子数组时,我不断收到“unexpectedly found nil when unwrapping optional”错误。在该行之前,JSON 被正确解析并工作。

let loadURL = "https:// ....."
var people = [Person]()

func getPersonData() {
    let request = URLRequest(url: URL(string: loadURL)!)
    let urlSession = URLSession.shared
    let task = urlSession.dataTask(with: request, completionHandler: { (data, response, error) -> Void in
        if let error = error {
            print(error)
            return
        }
        // Parse JSON data
        if let data = data {
            self.people = self.parseJsonData(data)
            OperationQueue.main.addOperation{() -> Void in
                self.tableView.reloadData()
            }
        }
    })
    task.resume()
}

func parseJsonData(_ data: Data) -> [Person] {
    var people = [Person]()

    do {
        let jsonResult = try JSONSerialization.jsonObject(with: data, options: JSONSerialization.ReadingOptions.mutableContainers) as? NSDictionary

        // Parse JSON data
        let jsonPeople = jsonResult?["people"] as! [AnyObject]
        for jsonPerson in jsonPeople {
            let person = Person()
            person.name = jsonPerson["name"] as! String
            person.id = jsonPerson["id"] as! String

            //ERROR//: "unexpectedly found nil when unwrapping optional..."
            let jsonChildren = jsonResult?["children"] as! [AnyObject]
            for jsonChild in jsonChildren {
                let child = Child()
                child.name = jsonEntrance["name"] as! String
                child.age = jsonEntrance["age"] as! Int

                person.children.append(child)
            }

            people.append(person)
        }
    } catch {
        print(error)
    }
    return people
}

最佳答案

你在这里犯了一个错误:

let jsonChildren = jsonResult?["children"] as! [AnyObject]

应该是:

let jsonChildren = jsonPerson["children"] as! [AnyObject]

关于ios - 当对象包含其他对象的数组时,如何解析 JSON?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40381544/

相关文章:

IOS:日期的字符串拆分

ios - 在一个 View Controller 上具有静态单元格和动态 TableView 的 TableView

ios - 如何在 App Store Connect 中添加本地化?

php - 如何通过 MySQL 表将 Python 列表转换为 PHP 数组

javascript - 使用javascript数组创建MLM类型树结构

javascript - 如何使用javascript将两个对象的值合并为一个

ios - 我如何在第 2 代 SKSpriteNode 之间等待?

c++ - 指向数组的指针 - 初始化元素

java - jqGrid 未填充来自 Java Servlet 的 JSON 数据

android - 在 flutter 中仅显示产品名称列表,使用 json 格式的 woocommerce api 数据