在javascript中解析json

时间:2012-02-20 16:04:17

标签: php javascript json

我加载了一个php / json文件。这是我的json文件:

echo '{';
echo '"position":[';
while($inhoud = mysql_fetch_array($result))
{
  echo '{';
  echo '"lat":"'.$inhoud['lat'].'",';
  echo '"long":"'.$inhoud['long'].'",';
  echo '}';

}

echo ']}';

这很有效。我想在我的javascript中加载它,并按照这样做:

$.getJSON('req/position.php', function(data) { 
$.each(data, function(key, val) {
    newLatLng = key;
});
});

但这不起作用。它加载文件,但我没有得到这些数据。我该怎么办?

谢谢,

5 个答案:

答案 0 :(得分:5)

我认为你在JSON输出中有一些语法错误。

  • 当您输出"long"数据时,最后会添加逗号,,但不应该,因为"long"是对象的最后一个键。
  • 您在while周期内打印出一个对象。这些对象是数组的一部分。因此,除了最后一个,您必须在结束,后附加逗号}

而且,如果我可以问,为什么你没有使用 json_encode() PHP函数,而不是手动构建所有JSON字符串 ?有了它,您可以将所有数据构建为普通的PHP数组,然后使用JSON对其进行编码(转换)。你会避免所有这些烦人的语法东西。

试一试:

$data = array();
$data['position'] = array();

while($inhoud = mysql_fetch_array($result)) 
{
    $data['position'][] = array(
        "lat" => $inhoud['lat'],
        "long" => $inhoud['long']
    );
}

echo json_encode($data);

答案 1 :(得分:1)

您在名为position的数组中定义了坐标。你需要迭代它。 Array包含具有属性latlong的对象。如果您想使用这些值,您应该尝试类似:

$.getJSON('req/position.php'), function(data){
    $.each(data.position, function(index, value){
        var newLatLng = { latitude: value.lat, longitude: value.long };
    });
});

答案 2 :(得分:1)

在PHP脚本中返回正确的标头 header('Content-type: application/json'); 它应该工作。

还可以使用json_encode将PHP值编码为有效的JSON。

答案 3 :(得分:1)

通过字符串构建php中的JSON,但是很原始。开始构造一个数组并使用json_encode()。

$arr = array();

while($inhoud = mysql_fetch_array($result)){
  $temp = array();
  $temp['lat'] = $inhoud['lat'];
  $temp['long'] = $inhoud['long'];
  $arr[] = $temp;
}

echo json_encode($arr);

如果您在mysql查询中选择的所有内容都是'lat'和'long',那么您也可以将$inhoud放入while循环中的$arr,就像这样。

while($inhoud = mysql_fetch_array($result)){      
  $arr[] = $inhoud;
}

如果这样做,请确保只选择要在JSON中输出的mysql查询中的列。

答案 4 :(得分:0)

$.getJSON('req/position.php', function(data) {
   var obj = JSON.parse(data);
   // At this point, obj is an object with your JSON data.
});

来源:MDN