在javascript中读取JSON数据

我有这个JSON对象

{"stores":"{ "1":{ "name":"Publix", "address":"1fbdfhbdhsdhsrh", "long":"-84.012502", "lat":"33.878952"}, "2":{ "name":"Publix", "address":"fgsregerge", "long":"-84.125147", "lat":"33.9448"} }" 

}

这是在jquery.ajax调用中返回的数据类型:json。 我能够访问data.stores并显示警告框中的所有商店,但data.stores.1不起作用..我怎样才能正确阅读?

你可以使用data.stores["1"] ,但实际上你似乎是以一种非常奇怪的方式表示一个数组。

你应该只使用一个数组:

 { "stores": [ { "name": "Publix", "address": "1fbdfhbdhsdhsrh", "long": "-84.012502", "lat": "33.878952" }, { "name": "Publix", "address": "fgsregerge", "long": "-84.125147", "lat": "33.9448" } ] } 

然后,您可以这样访问它:

data.stores[0]data.stores[1]

在“stores”之后删除不必要的引号:JSON现在应该如下所示:

 var dat = { "stores": { "1": { "name": "Publix", "address": "1fbdfhbdhsdhsrh", "long": "-84.012502", "lat": "33.878952" }, "2": { "name": "Publix", "address": "fgsregerge", "long": "-84.125147", "lat": "33.9448" } } }; 

并尝试使用此代码:

 alert(dat.stores["1"]); 

工作示例: http : //jsfiddle.net/mstjA/

那个JSON无效。 当你把它带进Stack时,可能只是一个错字。

 var data = { "stores": { "1": { "name": "Publix", "address": "1fbdfhbdhsdhsrh", "long": "-84.012502", "lat": "33.878952" }, "2": { "name": "Publix", "address": "fgsregerge", "long": "-84.125147", "lat": "33.9448" } } } 

您不能使用点表示法来引用数字键。 你需要使用括号。 这两个是等价的:

 var a = data.stores["1"].name; /* a = "Publix" */ var b = data["stores"]["1"]["name"]; /* b = "Publix" */ 

快乐的编码!

这个JSON对象有些奇怪:它无效。 stores附近有双引号。 我想它们应该被删除,以便stores属性不是JSON字符串而是JSON对象。 然后你可以像这样访问它:

 alert(data.stores['1'].name); 

这是一个现场演示 。

如果双引号确实存在,那么,你有无效的javascript,因为你没有正确地转义里面的双引号。

data.stores['1']将为您提供json对象,然后您可以访问其中的属性

 var stores = data.stores['1']; var name = stores.name; var address = stores.address;