JSON Parser错误

时间:2010-07-01 09:00:04

标签: javascript json

我正在使用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);

  });

解析器失败并抛出错误。

有谁知道如何处理这样的对象。

5 个答案:

答案 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标准函数。