【问题标题】:How to access elements of JSON Array in Swift 2如何在 Swift 2 中访问 JSON 数组的元素
【发布时间】:2016-07-14 11:47:19
【问题描述】:

我有一个字符串,dataString,包含以下json信息:

{"products":[
 {"DBID":"2954","ScanID":"143","Name":"Cables","Count": 7,"Info":""},
 {"DBID":"5551","ScanID":"129","Name":"Batteries","Count": 24,"Info":""},
 {"DBID":"7143","ScanID":"003","Name":"Media","Count": 49,"Info":""}
]}

我该怎么做

  1. 使用 Swift 2 遍历此数据以计算所有产品的“计数”字段的总数?
  2. 访问特定“产品”槽的数据元素。例如,如果我知道我需要检索插槽 1 中产品的“名称”,我该如何直接访问它?

【问题讨论】:

标签: swift


【解决方案1】:

要获得所有计数的总和,您可以使用 iOS 的 sum 运算符。有关更多收集操作员,请查看此link。您需要像这样更改代码

do {
    //Here jsonStr in your json String
    let data = jsonStr.dataUsingEncoding(NSUTF8StringEncoding)
    let dic = try NSJSONSerialization.JSONObjectWithData(data!, options: .MutableContainers) as! NSDictionary
    let proArr = dic["products"] as! NSArray
    let sum = proArr.valueForKeyPath("@sum.Count")
    print(sum) //Print sum of the all count
    print(proArr[0]["name"]) //To print name of first products
}
catch let e as NSError {
    print(e.localizedDescription)
}

【讨论】:

  • 当我尝试你的答案时,它会打印出带有数组数据的“可选”。因此, print(proArr[0]["name"]) 打印“Optional(Cables)”。我尝试打开包装然后打印,但还是一样。
  • 尝试像print(proArr[0]["name"]!)一样打印
  • 它仍然做同样的事情。
  • 这给出了一个编译错误“无法强制解开非可选类型'AnyObject'的值
  • 如果我执行以下操作,它会起作用,但我不确定为什么有必要,因为我似乎正在使用可选绑定来解包已经强制解包的可选。如果让 theName = proArr[i]["Name"]! { print(theName) }
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-28
相关资源
最近更新 更多