json错误:元素列表后“缺少”或“只是”未定义“

时间:2009-11-20 12:41:06

标签: javascript json

我有一个json喜欢:

 {"156644":{ "name":"name1",
           "street":"street1",
           "city":"city1"
 "68656":{  "name":"name2 ",
           "street":"street2",
           "city":"city1"
 "388655":{ "name":"name3",
           "street":"street3",
           "city":"city1"
 "4564":{  "name":"name4",
           "street":"street4",
           "city":"city1"
 "6333":{  "name":"name5",
           "street":"street5",
           "city":"city1"}}

现在我要解码这个json。在我的Javascript中,我写道:

        var object = eval(obj_json);
        if(typeof(object)!="undefined"){
            //fuel
            for (var ii=0; ii<object.length; ii++){
                alert(ii)
            }
        }

现在我在object.length上遇到一个未定义的错误。所以我试着解析我的json:

var object = eval(' (' + obj_json + ') '); alert(object.length);

但这根本不起作用。 现在我在元素列表后面出现“缺失”错误。

你帮我吗? PLZ!

5 个答案:

答案 0 :(得分:3)

您在每个元素后缺少右括号:

 {"156644":{ "name":"name1",
           "street":"street1",
           "city":"city1"       // Bracket needs to be here!
 "68656":{  "name":"name2 ",
           "street":"street2",
           "city":"city1"       // Bracket needs to be here!
// ...

相反,它应该看起来像:

 {"156644":{ "name":"name1",
           "street":"street1",
           "city":"city1"},
 "68656":{  "name":"name2 ",
           "street":"street2",
           "city":"city1"},
 // ...

答案 1 :(得分:1)

你错过了所有地方关闭}件事。你的意思不是这个:

 {"156644":{ "name":"name1",
           "street":"street1",
           "city":"city1" }, // THIS, RIGHT HERE
 "68656":{  "name":"name2 ",
           "street":"street2",
           "city":"city1" }, // AND THIS
 "388655":{ "name":"name3",
           "street":"street3",
           "city":"city1" }, // AND THIS
 "4564":{  "name":"name4",
           "street":"street4",
           "city":"city1" }, // AND THIS
 "6333":{  "name":"name5",
           "street":"street5",
           "city":"city1"}}

答案 2 :(得分:0)

取出有关问题的任何建议,因为OP的两个帖子有不同的内容。但仍然建议JSONLint

答案 3 :(得分:0)

如果这是您的JSON的精确转储,那么您的问题在于您的var名称;

您的JSON提供程序需要更改其输出,或者您需要在尝试解码之前对其进行解析,以在其中获取正确的var名称:

json=eval( obj_json.replace( /([, \n\r\t])([0-9]*):/g, '$1"v_$2":' ) );

(未经过严格测试,只是一个适用于示例代码的示例)

答案 4 :(得分:0)

顺便说一句:我通过编码解决了这个问题:

eval("var jsonobject=" + obj_json);

现在它有效!现在我可以写:

for(ii in jsonobject){
    var intii = parseInt(ii);
    if (!isNaN(intii)){
        var street = jsonobject[ii].street;
        alert(street)
    }
}