NSDebugDescription =“JSON文本不是以数组或对象开头,而是选项允许未设置片段。”;

时间:2013-03-17 00:37:29

标签: php ios afnetworking

我正在使用AFJSONRequestOperation来请求服务器并解析返回的JSON响应,但在解析时,我收到了这个错误:

NSDebugDescription = "JSON text did not start with array or object and option to allow fragments not set.";

我检查了API并返回了JSON数据:

header('Content-type: text/json');
$arr[] = array("Message" => "update succeeded");
echo '{"Result":'.json_encode($arr).'}';

知道如何解决这个问题吗?

修改

我尝试从浏览器调用API并在URL中包含请求,因此我收到了有效的JSON响应:

{"Result":[{"Message":"update succeeded"}]}

7 个答案:

答案 0 :(得分:1)

请尝试以下操作:

let manager = AFHTTPSessionManager(baseURL: NSURL("Base URL"))
manager.requestSerializer = AFJSONRequestSerializer()
manager.responseSerializer = AFJSONResponseSerializer()

 let params = [
    "foo": "bar"
]

manager.POST("API url", parameters: params, 

success: {
    (task: NSURLSessionDataTask!, responseObject: AnyObject!) in
        print("success") 
}, 

failure: {
    (task: NSURLSessionDataTask!, error: NSError!) in
        print("error")
})

答案 1 :(得分:0)

首先,json_encode整个对象,而不是分成碎片。

其次,除非$ arr包含多个元素(上面的示例中不清楚),否则应该将其初始化为:

$arr = array("Message" => "update succeeded");

我仍然不确定这里还有什么问题。你应该回应你的应用程序正在接收的内容,这应该表明问题。

答案 2 :(得分:0)

请使用可接受的内容类型。 在你的webservice中,应该只是纯文本。

这是我的快速代码并修复:

    let manager = AFHTTPRequestOperationManager()

    manager.requestSerializer=AFJSONRequestSerializer()
    manager.responseSerializer = AFHTTPResponseSerializer();

    manager.GET(

        baseURL + (webServiceType as String) + secureParam,
        parameters:[:],

        success:
        { (operation: AFHTTPRequestOperation!,
            responseObject: AnyObject!) in
            completion(obj: responseObject)
        },
        failure:
        { (operation: AFHTTPRequestOperation!,
            error: NSError!) in
            completion(obj: nil)
    })

答案 3 :(得分:0)

检查您是否在API的基本网址之前添加了/ api /

http:// someurl / yourBasrUrl / api / apiName

答案 4 :(得分:0)

要生成有效的json响应,您的代码应该 看起来像这样:

$response = array(
    "Result" => array(
        "Message" => "update succeeded"
    )
)

echo json_encode($response);

答案 5 :(得分:0)

如果您需要读取片段json,则可以使用选项.allowFragments,如下所示:

JSONSerialization.jsonObject(with: someData, options: .allowFragments)

答案 6 :(得分:0)

首先,您的API返回不正确的Content-Type。 JSON数据的正确内容类型是application/json。使用第三方库时,这可能会发生冲突。

第二,您不应该“手工”生成json字符串。总共应该将API修改为:

header('Content-type: application/json');
$arr[] = array("Message" => "update succeeded");
echo json_encode(array('Result' => $arr));

最后击球同样重要。还有另外一件事可能要负责:您可能会在api PHP脚本的开始处就有BOM字符。这些是空格,因此您可能无法在浏览器中看到它们。请ensure that your PHP files are encoded without BOM