【问题标题】:JSON text did not start with array error in JSONSerialization SwiftJSON 文本在 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。

标签: ios json swift swift4


【解决方案1】:

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

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

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

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

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

来自文档:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-07
    • 2017-02-23
    • 2018-05-21
    相关资源
    最近更新 更多