Javascript 基本JSON.parse问题

Javascript 基本JSON.parse问题,javascript,json,parsing,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[

我似乎无法访问我的对象

解析服务器字符串后:

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或不是对象


有什么想法吗?

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

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

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

如果
JSON.param1
就是您所说的,那么
JSON.param1[0].ID
应该可以工作(并计算为“17”)


如果它不起作用,您能告诉我们您正在解析的文本以生成JSON对象吗?

编译并扩展所有注释…;)


出现问题的第一个线索是您的警报:

alert(json.param1)
而不是得到:

{"ID":17,"Name":"swimming pools","ParentID":4,"Path":""},
{"ID":64,"Name":"driveways","ParentID":4,"Path":""}
您应该得到与以下类似的结果:

[object],[object]

尝试警告数组元素本身的
类型:

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\":\"\"}"
]}
{"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\":\"\"}"
]}
{"param1" : [
  {"ID":17,"Name":"swimming pools","ParentID":4,"Path":""},
  {"ID":64,"Name":"driveways","ParentID":4,"Path":""}
]}
然后,可能是解析器。

试试这个

// 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"

他说这是调用
alert(json.param1)
的输出,不管它仍然是无效的json。这就是我的观点:它不是json,它是一个对象的输出,该对象显然是从某个json成功创建的。@nickf:我本来希望看到[object]或者警报中的其他内容,如果它是正在发出警报的有效对象。我不相信对象的JSON格式会被警告。@nickf:查看数组之外的对象
alert(json.param1)
应该是
“[object],[object]”
您可能希望发布源json的一段或一个示例,而不是警报版本——Array.toString不会返回有效的json,这可能会引起误解。是的,导致您发出警报的myJsonText的值是多少?如果原始json有问题,然后他就看不到json.param1的值了。数组可能很好,但里面的对象似乎被解析为字符串:(缩写)
[“{\'ID\':17}”,“{\'ID\':64}]
因此,在收到警报时看到了
{“ID”:17},{“ID”:64}
。谢谢,这样做了。服务器端出了什么问题,我必须首先这样做?服务器将主JSON文本(
myJsonText
)作为带引号的字符串数组而不是JSON对象数组发送。每个字符串都是JSON文本,需要第二个
parse
来获取对象。如果你
alert(myJsonText)
仔细看,我打赌你会看到额外的引号。是的,这就是正在发生的事情。我猜没有真正的理由重新审视我的服务器逻辑,改变JSON传递给客户机的方式。我将使用您的解决方案进行将来的解析。再次感谢。