我正在使用json.org的json解析器来处理我的应用程序中的数据。问题是解析器无法处理某些json格式。
一个请求会收到以下数据。
<?php
$obj = array("cities"=>array("city1","city2","city3","city4","city5"));
echo json_encode($obj);
?>
结果在json下面
{
"cities": ["city1","city2","city3","city4","city5"]
}
以下代码处理上述数据
var data = json_parse(XMLHttpRequestObject.responseText, function (key, value){
alert(key +' = '+value);
});
解析器失败并抛出错误。
有谁知道如何处理这样的对象。
答案 0 :(得分:3)
我执行以下操作进行快速测试,似乎有效:
var text = '{ "cities": ["city1","city2","city3","city4","city5"] }';
var data = json_parse(text, function (key, value){
document.write(key + ' = ' + value + '<br/>');
});
document.write('result = ' + data);
它以递归方式遍历结构,结果如下:
0 = city1
1 = city2
2 = city3
3 = city4
4 = city5
cities = ,,,,
= [object Object]
result = undefined
XMLHttpRequestObject.responseText
字段中包含哪些内容?
另外,您不应该从function(key, value)
答案 1 :(得分:1)
您需要将密钥和值放入 double 引号:
{
"cities": ["city1","city2","city3","city4","city5"]
}
值可以是双引号或数字,或true或false或null,或对象或数组的字符串。这些结构可以嵌套。
您可以使用jsonlint验证代码。
答案 2 :(得分:0)
我打赌问题出在你的数据上。 city3之前的''
是错误的。
如果您在错误引发中包含一些信息,那将会有所帮助。
答案 3 :(得分:0)
解析器失败,因为JSON数据格式错误。 city3
前面有两个引号,city4
的起始引号丢失。
{
cities: ['city1','city2','city3','city4','city5']
}
您是否可以控制生成此输出的代码?看起来它是手工构建的,如果可能的话,它应该使用JSON库生成。
PHP示例:
$output = array(
'cities' => array('city1', 'city2', 'city3', 'city4', 'city5')
);
echo json_encode($output);
输出:
{"cities":["city1","city2","city3","city4","city5"]}
答案 4 :(得分:0)
问题似乎出现在应用程序的json编码算法中。
由于你没有指定应用程序语言,我无法告诉你使用的确切函数/方法,但我建议你使用标准的json编码技术,而不是重新发明轮子。
例如在php中,您可以使用开源世界中众多编码库之一的json_encode
标准函数。