iOS swift 3.0 本地 JSON 解析崩溃

Posted

技术标签:

【中文标题】iOS swift 3.0 本地 JSON 解析崩溃【英文标题】:iOS swift 3.0 local JSON parsing crash 【发布时间】:2016-09-29 09:10:25 【问题描述】:

我在我的 swift 项目中使用本地 JSON。我需要提取数组中的数据。我遇到了意外的崩溃。

我的 JSON 是:


cueca =     (
             
             agentName = "Sant";
             applicationName = "Get CDR Avaya";
             body = "Detail of the message.";
             imageType = 1;
             messageType = 1;
             requestTime = "2016-01-01 00:00:04";
             sendTime = "2016-01-01 00:00:04";
             subject = "Mensagem 05";
             ,
             
             agentName = "Sant2";
             applicationName = "Script Programming2";
             body = "Detail of the message.";
             imageType = 1;
             messageType = 1;
             requestTime = "2016-01-01 00:00:03";
             sendTime = "2016-01-01 00:00:03";
             subject = "Mensagem 04";
             
);

我的代码是:

    let file = Bundle.main.path(forResource: "ABC", ofType: "json")! as NSString
    let url = URL(fileURLWithPath: file as String)
    let data = try! Data(contentsOf: url)
    let json = try! JSONSerialization.jsonObject(with: data)

我的问题是:

致命错误:“试试!”表达式意外引发错误:错误域 = NSCocoaErrorDomain 代码 = 3840“字符 6 周围的对象中的值没有字符串键。” UserInfo=NSDebugDescription=在字符 6. 附近的对象中没有值的字符串键:文件 /Library/Caches/com.apple.xbs/Sources/swiftlang/swiftlang-800.0.46.2/src/swift/stdlib/public/core/ ErrorType.swift,第 178 行

我需要获取“cuaca”中的所有对象,我可以使用该数组以供进一步使用。

【问题讨论】:

这意味着不是一个有效的 json ,检查一次你的 JSON 文件 【参考方案1】:

崩溃是因为文件路径为 nil 或 url 为 nil 或数据为 nil。请添加零检查。试试下面的代码

 if let file:String = Bundle.main.path(forResource: "ABC", ofType: "json")
        
            if let url:URL = URL(fileURLWithPath: file)
            
                if let data:NSData = NSData(contentsOf: url as URL)
                
                    do
                      _ = try JSONSerialization.jsonObject(with: data as Data, options: JSONSerialization.ReadingOptions())
                    catch
                        print(error)
                    

                

            

        

【讨论】:

【参考方案2】:

如果您从服务器或其他任何地方获取 json 数据,最后它是一个有效的 json 数据问题,只需在创建 json 点头时尝试纠正错误,而在您的数据中,您有 cueca 对象数组2 代理记录。

有效JSON 示例:


    "cueca": [
        "agentName": "Sant",
        // data so on
    , 
        "agentName": "Sant2",
        // data so on
    ]

这里的字典 cueca 包含一个 [ ] 数组 的记录。

【讨论】:

以上是关于iOS swift 3.0 本地 JSON 解析崩溃的主要内容,如果未能解决你的问题,请参考以下文章

在swift iOS中使用JSON解码器解析本地Json

Swift 3.0 中的 JSON 解析失败

如何使用 Swift 3.0 解析这个 JSON 对象

在 Swift 3.0 中访问从 iTunes API 解析的 JSON 对象

iOS Swift:使用 AFNetworking 解析响应 json

如何在 swift iOS 中使用 swift 高阶函数从本地 json 创建 ViewModel