json - 使用 InputReader 解析包含数组的 JSON 字符串?

标签 json swift swift2 nsjsonserialization nsinputstream

我对 JSON 有疑问。我通过互联网搜索,但没有找到适合我的解决方案。

为了更好地工作,我将服务器的答案 (JSON) 保存在 *.json 文件中。 JSON 看起来像这样(简短版本):

{"data":"[{\"id\":38,\"name\":\"Anton\"},{\"id\":160,\"name\":\"Christopher Eth\"}]"}

我想解析以字符串形式在“数据”中发送的数组。我试图从“数据”中获取字符串并在 NSJSONSerialization 中再次传递字符串。

这样对吗?

guard let path = NSBundle.mainBundle().pathForResource("names", ofType: "json") else {
        print("Error finding File")
        return
    }

    do {
        let data:NSData? = NSData(contentsOfFile: path)

        if let jsonResult =
            try NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.MutableContainers) as? NSDictionary {
                let result = jsonResult["data"]
                if(result == nil){
                    print("error")
                }else{
                    //How can I convert the result! to an Stream to pass it to the JSONSerialization???
                    let stream = NSInputStream(/*result!*/)
                    let resultArray = try NSJSONSerialization.JSONObjectWithStream(stream: stream, options: NSJSONReadingOptions.MutableContainers) as? NSArray{
                    //Do something with array
                }

    }catch let error as NSError{
        print("Error: \(error)")
        return
    }

最佳答案

NSStream 不需要,只需将 JSON 字符串转换为 NSData 并再次调用 JSONObjectWithData

guard let url = NSBundle.mainBundle().URLForResource("names", withExtension: "json"), jsonData = NSData(contentsOfURL: url) else {
  print("Error finding File")
  return
}
do {
  let names = try NSJSONSerialization.JSONObjectWithData(jsonData, options: []) as! [String:AnyObject]
  if let jsonResult = names["data"] {
    let nameData = jsonResult.dataUsingEncoding(NSUTF8StringEncoding)!
    let resultArray = try NSJSONSerialization.JSONObjectWithData(nameData, options: .MutableContainers) as! [[String:AnyObject]]
    for item in resultArray {
      print(item["name"]!, item["id"]!)
    }
  } else {
    print("error")
  }
} catch let  error as NSError {
  print(error)
}

关于json - 使用 InputReader 解析包含数组的 JSON 字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34654935/

相关文章:

Ios Swift 循环遍历 info.plist 中应用程序提供的字体

objective-c - 从Swift 2项目中删除Obj-C桥接 header 后的错误

swift - Swift 中的惰性

php - jquery自动完成返回数据

javascript - AngularJS 在数组中搜索过滤器到对象中

ios - 从适配器更改 viewController 变量?

ios - 使用 CABasicAnimation 为 UITextField 绘制描边动画

ios - 在 pageController 中获取可见 View

java - 如何使用 Jackson 基于注释从对象中(反)序列化字段?

php - 使用 PHP JSON 问题的 SQL 数据库中的 Google Vis 注释时间线