我正在使用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"}]}
答案 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。