需要帮助将此对象解析为JSON(javascript)

时间:2011-04-28 02:42:48

标签: javascript json parsing

我正在尝试使用javascript中的JSON.parse方法解析JSON数据(在底部)。下面是代码。

 var i;
 var myData={};
 $(document).ready(function(){

        $.get("http://localhost:4567/get/233307/loc/15000/10", function(data){
                display(data);

            }, "json");
    });
 function display(x){
    for(i = 0; i <= x.length;i++){
        myData = JSON.parse(x[i]);
    }
    alert(myData[2].uid);
 }

根据我的说法,上面的代码应该解析JSON数据并存储到myData。但应该给我233307的警报给了我一个undefined。我觉得我做得很对。有帮助吗?感谢。

{"id":64567868968,"uid":233307,"lat":41.418972,"long":-72.8941315,"date":"2010-11-11T16:01:15-05:00"},{"id":64567803255,"uid":
233307,"lat":41.4189505,"long":-72.89411,"date":"2010-11-11T16:00:13-05:00"},{"id":64567803254,"uid":233307,"lat":
41.4189451666667,"long":-72.8940725,"date":"2010-11-11T15:59:11-05:00"},{"id":64567803253,"uid":233307,"lat":
41.4188646666667,"long":-72.8940831666667,"date":"2010-11-11T15:58:08-05:00"},{"id":64567803252,"uid":233307,"lat":
41.4190095,"long":-72.8941905,"date":"2010-11-11T15:57:06-05:00"},{"id":64567700284,"uid":233307,"lat":
41.418972,"long":-72.894169,"date":"2010-11-11T15:56:04-05:00"}

3 个答案:

答案 0 :(得分:1)

我看到三个问题:

  1. 您不需要JSON.parse();通过将json指定为dataType请求的GET,您可以要求jQuery自动将响应解析为JSON。因此,当调用display()时,x已经是JSON对象而不是需要解析的字符串。

  2. 您似乎希望迭代display()中的数组,但示例响应不是数组,它只是一个以逗号分隔的JSON对象列表。它不是有效的JSON,除非它包含在[]中(使其成为一个数组)。如果这确实是您的回复,那么jQuery将无法解析它,并且x将是未定义的。

  3. 最后,(一旦你修复了#2),你已经在遍历数组并且myData获得(重新)分配循环的每次迭代到下一个JSON对象,最后设置为最后一个JSON对象,该对象不是数组,因此myData[2]无效。它应该只是myData.uid。或者不是遍历数组,因为它们都具有相同的uid,您可以将display()改为:

     function display(x){
        if(x && x.length > 0){
            alert(myData[0].uid);
        }
     }
    

答案 1 :(得分:0)

您缺少对象周围的数组括号

[{"id":64567868968,"uid":233307,"lat":41.418972,"long":-72.8941315,"date":"2010-11-11T16:01:15-05:00"},{"id":64567803255,"uid":
233307,"lat":41.4189505,"long":-72.89411,"date":"2010-11-11T16:00:13-05:00"},{"id":64567803254,"uid":233307,"lat":
41.4189451666667,"long":-72.8940725,"date":"2010-11-11T15:59:11-05:00"},{"id":64567803253,"uid":233307,"lat":
41.4188646666667,"long":-72.8940831666667,"date":"2010-11-11T15:58:08-05:00"},{"id":64567803252,"uid":233307,"lat":
41.4190095,"long":-72.8941905,"date":"2010-11-11T15:57:06-05:00"},{"id":64567700284,"uid":233307,"lat":
41.418972,"long":-72.894169,"date":"2010-11-11T15:56:04-05:00"}]

答案 2 :(得分:0)

你的意思是:

function display(x){
    var myData = [];
    for(i = 0; i <= x.length; i++){
        myData.push(JSON.parse(x[i]));
    }
    alert(myData[2].uid);
}

?循环的每次迭代都会覆盖之前的“myData”。我也无法告诉你要对x变量做什么......它是一个JSON对象,而不是一个数组,它也不包含字符串,因此你无法对它们进行评估。 / p>