JSON 文本在 JSONSerialization Swift 中没有以数组错误开头

Posted

技术标签:

【中文标题】JSON 文本在 JSONSerialization Swift 中没有以数组错误开头【英文标题】:JSON text did not start with array error in JSONSerialization Swift 【发布时间】:2017-11-21 09:51:16 【问题描述】:

执行以下请求时出现以下错误。

Error Domain=NSCocoaErrorDomain Code=3840 "JSON 文本没有开始 带有数组或对象以及允许未设置片段的选项。” UserInfo=NSDebugDescription=JSON 文本不是以数组开头或 允许未设置片段的对象和选项。

@IBAction func onPostTapped(_ sender: Any) 

        let parameters = ["Name": "Yogesh", "Mobile": "1212121212", "DOB": "1122/12/12", "Address": "qwqwqwqw"]
        //https://jsonplaceholder.typicode.com/posts
        guard let url = URL(string: "http://localhost/webservice/Register.php") else  return 
        var request = URLRequest(url: url)
        request.httpMethod = "POST"
        request.addValue("application/json", forHTTPHeaderField: "Content-Type")
        guard let httpBody = try? JSONSerialization.data(withJSONObject: parameters, options: []) else  return 
        request.httpBody = httpBody

        let session = URLSession.shared
        session.dataTask(with: request)  (data, response, error) in
            if let response = response 
                print(response)
            

            if let data = data 
                do 
                    let json = try JSONSerialization.jsonObject(with: data, options: [])
                    print(json)
                 catch 
                    print(error)
                
            

        .resume()

    

什么可能导致这个问题?

【问题讨论】:

我猜错误是JSONSerialization.jsonObject()catch?介意给我们看let dataStr = String(data: data, encoding:.utf8)(并打印出来)?但是我猜dataStr不是JSON Valid(网上有JSON Validator,查一下)。 > 200 SO 搜索结果为 “JSON 文本没有以数组或对象开头以及允许未设置片段的选项”,它们都没有帮助?? 我尝试了那个解决方案,但我是新手,所以无法理解这个解决方案@martin。 【参考方案1】:

错误说明了问题,接收到的 JSON 不是以对象或数组开头,并且未设置 Allow Fragments。

检查您的 JSON 是否是您希望收到的内容

您可以像这样启用允许片段..

try JSONSerialization.jsonObject(with: data, options: .allowFragments)

允许片段允许您加载不直接映射到数组或字典的部分 JSON 数据

来自文档:

指定解析器应该允许***对象 NSArray 或 NSDictionary 的实例。

【讨论】:

以上是关于JSON 文本在 JSONSerialization Swift 中没有以数组错误开头的主要内容,如果未能解决你的问题,请参考以下文章

如何在 MySQL 5.6 中比较类似 JSON 的文本?

如何使用节点将表单数据(文本/纯文本)转换为 json?

在大型 Json 文件中查找文本

“\/”文本显示在我的 JSON 链接值中 [重复]

如何将格式化文本存储在 oracle 表中并将其加载回 json?

使用 Retrofit 解析本地 JSON 文件中的文本