【问题标题】:SwiftyJSON looping through an array of JSON objectsSwiftyJSON 循环遍历 JSON 对象数组
【发布时间】:2015-06-27 17:57:42
【问题描述】:
[
    {
        "cont": 9714494770,
        "id": "1",
        "name": "Kakkad"
    },
    {
        "cont": 9714494770,
        "id": "2",
        "name": "Ashish"
    }
]

上面是一个用 JSON 对象填充的 json 数组。我不知道如何用 SwiftyJSON 解析这个

【问题讨论】:

  • JSON 不使用印刷引号 “ ... ” :)
  • 假设它们是正常的引用

标签: json swift swifty-json


【解决方案1】:

来自SwiftyJSON 页面的示例,适用于您的数据:

let json = JSON(data: dataFromNetworking)
for (index, object) in json {
    let name = object["name"].stringValue
    println(name)
}

【讨论】:

  • 为什么不能只用于 json 中的对象? json 中的 for (index, object) 做了什么不同的事情才能使其正常工作?我以前从未见过。谢谢
  • 您可以使用 _ 代替索引,但是当您需要知道您在数组中的位置时,索引在某些情况下会很有帮助。或者你可以使用key、object作为字典。
【解决方案2】:

假设 [{"id":"1", "name":"Kakkad", "cont":"9714494770"},{"id":"2", "name":"Ashish", "cont":"9714494770"}] 被分配给一个名为 jsonData 的属性。

let sampleJSON = JSON(data: jsonData)

let sampleArray = sampleJSON.arraysampleArray 是 JSON 对象的可选数组。

let firstDict = sampleArray[0]firstDict 是一个可选的 JSON 字典。

let name = firstDict["name"] 是一个可选的 JSON 对象

let virtName = name.string 是一个可选字符串(在本例中为“Kakkad”)。

let realName = name.stringValuerealName 是字符串或空字符串。

您还可以使用: let longName = sampleJSON[0]["name"].stringValue

在您使用数据初始化 JSON 对象后,所有元素都是 JSON 类型,直到您将它们转换为 swift 类型。

  • .string 可选(字符串或空)
  • .stringValue 字符串或“”为空 字符串
  • .dict 可选([String: AnyObject] 或 null)
  • .dictValue ([字符串:AnyObject] 或字符串:AnyObject)

【讨论】:

    【解决方案3】:

    对于 Swift4,我已经更新了 Moritz 答案中的代码

        if let path : String = Bundle.main.path(forResource: "tiles", ofType: "json") {
                    if let data = NSData(contentsOfFile: path) {
                        let optData = try? JSON(data: data as Data)
                        guard let json = optData else {
                            return
                        }
    //If it is a JSON array of objects
                        for (_, object) in json {
                            let name = object["name"].stringValue
                            print(name)
                        }
                    }
                }
    

    【讨论】:

      【解决方案4】:

      Swift 3 或 4 代码如下:

      let json = JSON(yourData)
      for (_, object) in json {
          let cont = object["cont"].stringValue
          print(cont)
      }
      

      如果您在代码中的任何位置使用 is,您可以使用 index 而不是 _。如果不使用变量,最好放_(XCode也会给出警告)。

      【讨论】:

        猜你喜欢
        • 2016-07-28
        • 1970-01-01
        • 1970-01-01
        • 2023-03-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多