NSJSONSerialization 解析错误

Parsing error with NSJSONSerialization

我在尝试从 URL 解析 JSON 时遇到错误。

代码如下:

      override func viewDidLoad() {  
      super.viewDidLoad()  
        print("hello")  
        let url=NSURL(string:"http://jsonReports/sample_testkrtk252.json")  
        print("hello2")  

        if let allContactsData=NSData(contentsOfURL:url!)  

        {  
            print(allContactsData)  
        do{  
       let allContacts: AnyObject! = try NSJSONSerialization.JSONObjectWithData(allContactsData, options: NSJSONReadingOptions.MutableContainers)  
            print(allContacts)  
            if let json = allContacts as? Array<AnyObject> {  

                print(json)  
                for index in 0...json.count-1 {  

                    let data12 : AnyObject? = json[index]  
                    print(data12)  

                    let collection = data12! as! Dictionary<String, AnyObject>  
                    print(collection)  

                    print(collection["data11"])  

                    let data11 : AnyObject? = collection["data11"]  
                    let cont : AnyObject? = collection["cont"]  

                    data1.append(data11 as! String)  
                    data2.append(cont as! String)  

                    print(data1)  
                    print(data2)  
                }  
            }  
        }  
        catch  
        {  
            print("error")  
        }  
        }  

并且在成功后 运行 它给出以下输出:

hello
hello2
<7b0d0a20 20202022 ... >
error
(lldb)

此外,它给出了错误:

NSError Domain: "NSCocoaErrorDomain" - code: 3840 0x00007f8b62c9ef50 _userInfo __NSDictionaryI * 1 key/value pair 0x00007f8b62dcb3c0

如果有人能研究这个就太好了。另外,有没有更好的方法来解析Swift中的JSON?

为什么不直接将返回的 JSONObjectWithData 的 AnyObject 转换为 NSDictionary 数组?像这样:

let allContacts = try NSJSONSerialization.JSONObjectWithData(allContactsData, options: NSJSONReadingOptions.MutableContainers) as! [NSDictionary]

您确定您的 JSON 有效吗? Swift 对此非常敏感。确保所有的键都被引用并且你没有忘记任何大括号(尤其是最外面的大括号)。

另外,对于 JSON 解析,我会推荐 SwiftyJSON,这会让事情变得容易得多。

您的文件 .json 不是有效结构。删除第一行:

"registration_id":APA91bEVsOgzkFFDCuEFn8PAS-FQqeaW6TRuz09CeKSnAJUSJmTvP8ubIsUkUe2zOzz8vk-FNqbNteOcD6m8m5nhrNWA96swZHYyX4nvY-mPCJTeBkEXTLuLwWCglbAUVCqJlwharLLJ,

现在尝试运行代码:

 func run()->(Void){
        //insert you file .jso into project. Or change the code
        let filePath  = NSBundle.mainBundle().pathForResource("sample_testkrtk252", ofType:"json")
        let nsMutData:NSData = NSData(contentsOfFile:filePath!)!
        do{  
            let allContacts:[String:AnyObject] =  try NSJSONSerialization.JSONObjectWithData(nsMutData, options: NSJSONReadingOptions.MutableContainers) as! [String : AnyObject]
            print(allContacts)

            for temp in 0...allContacts.count-1 {

                print(temp)
            }

        } catch
        {
            print("error")

        }
    }

感谢您的回答。 只是编辑 json 对我有用。 是的,确实需要正确遵循格式,否则简单的双引号会破坏预期的输出。 :)

"registration_id":"APA91bEVsOgzkFFDCuEFn8PAS-FQqeaW6TRuz09CeKSnAJUSJmTvP8ubIsUkUe2zOzz8vk-FNqbNteOcD6m8m5nhrNWA96swZHYyX4nvY-mPCJTeBkEXTLuLwWCglbAUVCqJlwharLLJ",

谢谢, 普拉米