Swift:解析 JSON 文件

Posted

技术标签:

【中文标题】Swift:解析 JSON 文件【英文标题】:Swift: Parsing JSON file 【发布时间】:2015-03-10 23:30:43 【问题描述】:

我有以下 JSON 文件:

 "_id" :  "$oid" : "54feffe1412807551c90eaa2" , "loc" : [ 35.09 , 12.01],
 "_id" :  "$oid" : "54ff0b62412807551c90eaa4" , "loc" : [ 43.98 , 12.34]

如何在 Swift 中解析这个 JSON 文件?我需要 loc 中的值。

【问题讨论】:

你可以很容易地通过谷歌搜索“xcode json to nsdictionary”找到这个 Xcode Parse Json的可能重复 【参考方案1】:

我遇到了一个问题,我遇到了一个致命错误:在展开 Optional 值时意外发现 nil。

我向我的服务器发送一个 http 请求。像这样

        NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue.mainQueue()) (response, data, error) in
        if error == nil 
            var datastring:String = NSString(data:data, encoding:NSUTF8StringEncoding)!
//          println(datastring)

            if (data != nil) 
                var json=NSJSONSerialization.JSONObjectWithData(data!, options: nil, error: &self.err) as NSDictionary
                println(json)

                if (error != nil) 
                    println(self.err?.localizedDescription)
                 else 
                  //do something here with json
                    
                
             else 
                println(error.localizedDescription)
            

并得到这个 json 文件:

 "_id" :  "$oid" : "54feffe1412807551c90eaa2" , "loc" : [ 35.09 , 12.01],
 "_id" :  "$oid" : "54ff0b62412807551c90eaa4" , "loc" : [ 43.98 , 12.34]

如果我只有一个文件,它可以工作。但是有两个文件我得到了致命错误。

【讨论】:

我的json文件好像不是有效的json。 是的,格式错误。请检查在线验证器工具。而对于您粘贴的 JSON,只需在开始和结束处放置方括号。【参考方案2】:

使用NSJSONSerialization:

func ParseJSONData(data: NSData) -> NSDictionary? 
    if let dict = NSJSONSerialization.JSONObjectWithData(data, options: nil, error: nil) as? NSDictionary  return dict 

    println("Failed to parse")
    return nil


// *********************

if let info = ParseJSONData(jsonstring.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false))

【讨论】:

是jsonstring NSData吗? 我不知道你会用什么,但对于这个例子,jsonstring当然是一个字符串。 请给我一个投反对票的目的,这显然是 OP 要求的...... 我没说是你。

以上是关于Swift:解析 JSON 文件的主要内容,如果未能解决你的问题,请参考以下文章

JSON文件下载后在Swift 3中解析JSON,NSCocoaErrorDomain Code=3840

如何使用 Codable 在 Swift 中使用动态文件名解析 JSON

如何正确解析 SWIFT 中的 JSON 对象

在 Swift 3 中解析 JSON 数组

使用 Swift 解析 JSON 的问题

解析 JSON Swift 3