【问题标题】:JSON Error when posting JSON发布 JSON 时出现 JSON 错误
【发布时间】:2016-12-27 20:22:23
【问题描述】:

尝试将 JSON 数据发送到站点时,我不断收到错误消息。但是当我检查站点时,我看到 json 中的所有数据都已发送并且是正确的。

我得到的错误是:

Error: Error Domain=NSCocoaErrorDomain Code=3840 "JSON text did not start with array or object and option to allow fragments not set." UserInfo={NSDebugDescription=JSON text did not start with array or object and option to allow fragments not set.}

我的代码是:

let json = [
            "name": "john",
            "last name": "smith"
        ]

        do{

            let jsonData = try NSJSONSerialization.dataWithJSONObject(json, options: .PrettyPrinted)


            let url = NSURL(string: website)

            let request = NSMutableURLRequest(URL: url!)

            request.HTTPMethod = "POST"

            request.setValue("application/json; charset=utf-8", forHTTPHeaderField: "Content-Type")
            request.HTTPBody = jsonData

            let task = NSURLSession.sharedSession().dataTaskWithRequest(request){ data, response, error in

                if error != nil{
                    print("Error: \(error)")
                    return
                }

                do {
                    let result = try NSJSONSerialization.JSONObjectWithData(data!, options: []) as? [String:AnyObject]

                    print("Result: \(result)")

                } catch {
                    print("Error: \(error)")
                }
            }

            task.resume()

        } catch {
            print(error)
        }

当我允许片段时:

try NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.AllowFragments)

我收到另一个错误:

Error: Error Domain=NSCocoaErrorDomain Code=3840 "Invalid value around character 0." UserInfo={NSDebugDescription=Invalid value around character 0.}

我变了:

try NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.AllowFragments)

try NSJSONSerialization.JSONObjectWithData(jsonData, options: NSJSONReadingOptions.AllowFragments)

我不再收到错误消息。

【问题讨论】:

    标签: ios json swift post


    【解决方案1】:

    数据成功发送到服务器后打印结果时发生错误。

    NSJSONSerialization.JSONObjectWithData 要求 JSON 以对象 ({}) 或数组 ([]) 开头。

    尝试像这样添加.AllowFragments 选项:

    let result = try NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.AllowFragments) as? [String:AnyObject]
    

    如果它不起作用,则从服务器返回的数据是无效的 JSON。您应该尝试打印responsestatusCode 看看是否有问题。

    如果你控制服务器,你应该看看发回的内容。

    【讨论】:

    • 根据我的经验,当来自服务器的响应不是 JSON 对象或数组时会发生此问题。只需尝试将响应包装在一个数组中。
    • 必须在服务器上完成。我不知道数据是如何生成的(PHP、.NET、JS、...),但您需要在其周围添加[]{}
    • 我无权访问服务器。我一直在使用requestb.in检查数据是否发送并正确发送。
    • 我明白了,你发送的 JSON 没问题。响应中从服务器发回的 JSON 格式不正确。如果您无权访问服务器,那么很遗憾,您无能为力...
    猜你喜欢
    • 2016-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-25
    • 1970-01-01
    • 2020-06-30
    • 2019-02-01
    • 1970-01-01
    相关资源
    最近更新 更多