Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JSON字符0周围的值无效_Json_Swift - Fatal编程技术网

JSON字符0周围的值无效

JSON字符0周围的值无效,json,swift,Json,Swift,如何正确调试错误消息 Error Domain=NSCocoaErrorDomain Code=3840 "Invalid value around character 0." UserInfo={NSDebugDescription=Invalid value around character 0.} 我在不同的场景中看到了这种情况,我总是很难找到真正的原因。 在上述情况下,我使用以下url返回JSON响应: http://SERVERIP/v1/aeds&latitude=48.1

如何正确调试错误消息

Error Domain=NSCocoaErrorDomain Code=3840 "Invalid value around character 0." UserInfo={NSDebugDescription=Invalid value around character 0.}
我在不同的场景中看到了这种情况,我总是很难找到真正的原因。 在上述情况下,我使用以下url返回JSON响应:

http://SERVERIP/v1/aeds&latitude=48.1848308444472&longitude=11.2527083605633
通过邮递员的服务器响应

{
  "data": [
    {
      "deviceReference": "D200",
      "owner": "Owner 200",
      "latitude": "48.185240",
      "longitude": "11.258890",
      "street": "StreetName",
      "featureTypeId": "1"
    },
    {
      "deviceReference": "D300",
      "owner": "Owner 300",
      "latitude": "48.179290",
      "longitude": "11.253350",
      "street": "StreetName",
      "featureTypeId": "1"
    },
    {
      "deviceReference": "D100",
      "owner": "Owner 100",
      "latitude": "48.176226",
      "longitude": "11.238890",
      "street": "StreetName",
      "featureTypeId": "1"
    }
  ],
  "meta": {
    "Heading 1": "H1",
    "Heading 2": "H2"
  }
}
在我看来,当通过Alamofire调用URL并对其进行处理时,json得到了正确的返回,但我仍然收到了消息

func getAEDInRange(latitude: Double, longitude: Double, completionHandler: (Result<[AED], NSError>) -> Void) {
    Alamofire.request(Router.GetAEDInRange("?latitude=\(latitude)&longitude=\(longitude)")).responseArray { (response: Response<[AED], NSError>) -> Void in
        print(response.result)
    }
}

如果您的JSON文档看起来很好,但无法解析(“字符0周围的错误”),那么原因有两种明显的可能性:一种是,看起来很好的JSON文档不是您试图解析的文档。第二,它看起来不错,但不好。例如,如果数据中没有转换为不可见字符的字节

当错误发生时,将NSData的第一个字节记录为字节,并检查实际存在的内容。并在错误发生的准确时间记录转换为字符串的解析数据

将AllowFragments作为参数传递是毫无意义的。您不希望看到碎片。你不知道如何处理碎片。如果有一个片段,那对你来说就是一个错误。那为什么要允许呢?充其量它会导致混淆(因为现在解析的响应可以像通常一样是字典或数组,但也可以是数字、字符串或null)


BOMs(字节顺序标记)实际上是允许在文档开始时,而不是在文档内部——如果在文档中间有一个错误,这是要查找的东西。“字节0处出错”通常是零字节

根据JSON规范,第一个字符必须是
[
{
。将文本URL粘贴到浏览器中并检查结果。这具有编码问题的所有特征,特别是,听起来您的JSON响应返回的BOM没有被用于读取它的任何对象解释/使用,因此BOM(可能是字符0xFE和0xFF,按该顺序或相反顺序)保留在字符串中--使字符串无效JSON。更多信息在and中。@vadian:这不再是真的,已经有几年没有了。(现在JSON文档可以是任何有效的JSON值,即使是
0
“foo”
),OP引用的JSON(理论上)以
{
。我在浏览器中添加了文本url的输出。但我看不出这在哪里是无效的JSON?我发现,当我删除参数时,请求工作正常。似乎参数会引起麻烦,但我如何找到哪里。它必须在解析器函数中。
public func responseArray<T: ResponseJSONObjectSerializable>(completionHandler: Response<[T], NSError> -> Void) -> Self {
    let serializer = ResponseSerializer<[T], NSError> { request, response, data, error in

        guard error == nil else {
            return .Failure(error!)
        }

        guard let responseData = data else {
            let failureReason = "Array could not be serialized because input data was nil."
            let error = Error.errorWithCode(.DataSerializationFailed, failureReason: failureReason)
            return .Failure(error)
        }

        let JSONResponseSerializer = Request.JSONResponseSerializer(options: .AllowFragments)
        let result = JSONResponseSerializer.serializeResponse(request, response, responseData, error)

        switch result {

        case .Success(let value):
            let json = SwiftyJSON.JSON(value)

            // Get Data content of JSON
            let jsonData = json["data"]

            var objects: [T] = []
            for (_, item) in jsonData {
                if let object = T(json: item) {
                    objects.append(object)
                }
            }
            return .Success(objects)

        case .Failure(let error):
            return .Failure(error)
        }
    }
    return response(responseSerializer: serializer, completionHandler: completionHandler)
}
{"data":[{"deviceReference":"D200","owner":"Owner 200","latitude":"48.185240","longitude":"11.258890","street":"StreetName","featureTypeId":"1"},{"deviceReference":"D300","owner":"Owner 300","latitude":"48.179290","longitude":"11.253350","street":"StreetName","featureTypeId":"1"},{"deviceReference":"D100","owner":"Owner 100","latitude":"48.176226","longitude":"11.238890","street":"StreetName","featureTypeId":"1"}],"meta":{"Heading 1":"H1","Heading 2":"H2"}}