【问题标题】:How do I parse an array inside parsed JSON in Swift?如何在 Swift 中解析 JSON 中的数组?
【发布时间】:2014-07-24 10:42:43
【问题描述】:

我正在使用返回 JSON 的 API,如下所示

{
   "boards":[
      {
         "attribute":"value1"
      },
      {
         "attribute":"value2"
      },
      {
         "attribute":"value3",
      },
      {
         "attribute":"value4",
      },
      {
         "attribute":"value5",
      },
      {
         "attribute":"value6",
      }
   ]
}

在 Swift 中,我使用两个函数来获取并解析 JSON

func getJSON(urlToRequest: String) -> NSData{
    return NSData(contentsOfURL: NSURL(string: urlToRequest))
}

func parseJSON(inputData: NSData) -> NSDictionary{
    var error: NSError?
    var boardsDictionary: NSDictionary = NSJSONSerialization.JSONObjectWithData(inputData, options: NSJSONReadingOptions.MutableContainers, error: &error) as NSDictionary
    return boardsDictionary
}

然后我用它来调用它

var parsedJSON = parseJSON(getJSON("link-to-API"))

JSON 解析良好。当我打印出来

println(parsedJSON["boards"])

我得到了数组的所有内容。但是我无法访问每个单独的索引。我很肯定它是一个数组,因为我这样做了

parsedJSON["boards"].count

返回正确的长度。但是,如果我尝试使用

访问各个索引
parsedJSON["boards"][0]

XCode 关闭语法高亮并给我这个:

并且代码不会编译。

这是 XCode 6 的错误,还是我做错了什么?

【问题讨论】:

  • parsedJSON["boards"][0] 肯定是objective-c文字,但它也是快速语法吗?不确定(但我想是的)
  • 此时似乎有几个与字典数组相关的错误。我目前也在努力反对它。
  • 如果解析出错并返回 nil,您的 parseJson 函数将崩溃。 “as NSDictionary”是罪魁祸首。有关如何使用 NSJSONSerialization 解析 JSON 的正确语法,请参阅我的答案:stackoverflow.com/a/24333999/1687195
  • Xcode 在奇怪的时候崩溃,可能不是你的代码。

标签: ios json swift


【解决方案1】:

Swift 中的字典访问返回一个 Optional,因此您需要强制该值(或使用 if let 语法)才能使用它。

这有效: parsedJSON["boards"]![0]

(不过,它可能不应该让 Xcode 崩溃)

【讨论】:

  • 我宁愿寻找类似的东西:myDto: MyDTO = getJson() println(myDto.field) println(myDto.anotherField)
【解决方案2】:

处理这个问题的正确方法是检查字典键的返回值:

    if let element = parsedJSON["boards"] {
        println(element[0])
    }

【讨论】:

    【解决方案3】:

    看这里:https://github.com/lingoer/SwiftyJSON

    let json = JSONValue(dataFromNetworking)
    if let userName = json[0]["user"]["name"].string{
        //Now you got your value
    }
    

    【讨论】:

      【解决方案4】:

      你可以创建一个变量

      var myBoard: NSArray = parsedJSON["boards"] as! NSArray
      

      然后您就可以访问“板”中的任何内容,例如-

      println(myBoard[0])
      

      【讨论】:

      • 任何时候将解析后的数据转换为数组时都会出错。
      猜你喜欢
      • 1970-01-01
      • 2020-01-29
      • 1970-01-01
      • 2017-06-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-14
      相关资源
      最近更新 更多