基本的JSON.parse问题

时间:2009-09-21 21:41:49

标签: javascript json parsing

我似乎无法访问我的对象。

解析服务器字符串后

var json = JSON.parse(myJsonText):

我收到以下警告:

alert(json.param1)

{"ID":17,"Name":"swimming pools","ParentID":4,"Path":""},
{"ID":64,"Name":"driveways","ParentID":4,"Path":""}

现在,我正在尝试访问ID和名称。

我试过了:

json.param1[0].ID
json.param1[0]["ID"]
json.param1[0][0]

还有很多其他人并没有做太多贡献 感觉如:

json[0].ID or 
json.param1.ID etc...

我得到了(例如,在json.param1 [0] .ID的情况下):

  

param1.0.ID为null或不是对象。

有什么想法吗?

5 个答案:

答案 0 :(得分:2)

看起来像无效的JSON。尝试将其包装在括号中,使其成为有效的JSON对象数组。然后通过索引访问它。

[
    {"ID":17,"Name":"swimming pools","ParentID":4,"Path":""},
    {"ID":64,"Name":"driveways","ParentID":4,"Path":""}    
]

答案 1 :(得分:2)

如果您在警报中收到原始JSON,那么这会让我相信您尝试解析的JSON存在问题。

答案 2 :(得分:2)

试试这个

// you already have this bit
var json = JSON.parse(myJsonText);
alert(json.param1);

// add this
var tmp_param1 = JSON.parse(json.param1);
json.param1 = tmp_param1;
alert(json.param1);  // should print [object, object] or similar

alert(json.param1[0].ID);  // should print "17"
alert(json.param1[0].Name);  // should print "swimming pools"

答案 3 :(得分:1)

编译并扩展所有评论......;)


你的第一个线索是你的警告出了问题:

alert(json.param1)

而不是得到:

{"ID":17,"Name":"swimming pools","ParentID":4,"Path":""},
{"ID":64,"Name":"driveways","ParentID":4,"Path":""}

你应该得到类似于以下内容的东西:

[object],[object]

尝试提醒typeof数组元素本身:

alert(typeof json.param1[0]) //=> should say "object"

如果你得到除"object"以外的任何内容,则JSON格式不正确或解析器失败。


关于哪个错误的一个好的线索是原始JSON是这样的:

{"param1" : [
  "{\"ID\":17,\"Name\":\"swimming pools\",\"ParentID\":4,\"Path\":\"\"}",
  "{\"ID\":64,\"Name\":\"driveways\",\"ParentID\":4,\"Path\":\"\"}"
]}

然后,可能是JSON破了。 (抱歉;)

另一方面,如果您的JSON看起来像这样:

{"param1" : [
  {"ID":17,"Name":"swimming pools","ParentID":4,"Path":""},
  {"ID":64,"Name":"driveways","ParentID":4,"Path":""}
]}

然后,它可能是解析器。

答案 4 :(得分:0)

如果您说的是json.param1,则json.param1[0].ID应该有效(并评估为“17”)。

如果它不起作用,您能否向我们展示您正在解析的文本以生成JSON对象?