在Javascript中访问Json

在Javascript中访问Json,javascript,json,Javascript,Json,当我尝试像这样访问上述内容时: '[{"SponsorID":382,"SponsorName":"Test Name","MonthEndReport":true,"AccountingManager":"Me","UnboundProperties":[],"State":16}]' for(变量i=0;i

当我尝试像这样访问上述内容时:

'[{"SponsorID":382,"SponsorName":"Test Name","MonthEndReport":true,"AccountingManager":"Me","UnboundProperties":[],"State":16}]'
for(变量i=0;i
它把每件事都说清楚了,比如
[,{,,,S
,等等


我也尝试过做
数据[I]。赞助商名称
,但显然得到了
未定义的
。我应该如何访问它?

首先需要
eval()
或者更理想的
JSON.parse()
将JSON字符串放入Javascript对象。这假设您信任JSON的源

for (var i = 0; i < data.length; i++) {
    alert(data[i]);
}
以下是经过评估和打印后的外观:


您需要解析JSON字符串,最好是使用
JSON.parse
JSON
API内置于更现代的浏览器中,可以通过包含来提供给更老的浏览器。Crockford的脚本将检测浏览器是否已经提供了API,如果没有,则添加它

如果JSON位于名为
response
的字符串变量中,则可以:

var jsonobj = JSON.parse(data); 
// Now view the object's structure
console.dir(jsonobj);
或者大家最喜欢的库,因为IE7及以下版本没有本机支持:

var array = JSON.parse('[{"SponsorID":382,"SponsorName":"Test Name","MonthEndReport":true,"AccountingManager":"Me","UnboundProperties":[],"State":16}]')
array[0].AccountingManager; // "me"

您首先解析了Json字符串,对吗

$.parseJSON('[{"SponsorID":382,"SponsorName":"Test Name","MonthEndReport":true,"AccountingManager":"Me","UnboundProperties":[],"State":16}]')

由于安全性和性能问题,JSON.parse(如果可用)是优于“eval”的首选方法。

您有一个JSON数组,后跟一个对象:

var data = '[{"SponsorID":382,"SponsorName":"Test Name","MonthEndReport":true,"AccountingManager":"Me","UnboundProperties":[],"State":16}]';
data = JSON.parse(data);
alert(data.SponsorName);

根据OP迭代的输出,他说的是他的JSON,很明显他正在使用未解析的JSON,也称为字符串。此外,没有“JSON数组”或“JSON对象”。JSON是一种序列化方案,使用JavaScript文本语法的子集来描述数据结构。因此
[1,2,3]
不是一个JSON数组,它是一个JavaScript数组文本,而
'[1,2,3]
是一个可以解析为数组的JSON序列化数据字符串。从JSON.org“JSON数组是一个由逗号分隔的值的有序集合。整个数组被包装在方括号中。它直接映射到数组、向量和列表。它还声明:“JSON对象是键/值对的无序集合。”好的,因此我的响应中的“没有这样的东西”部分基于该描述是不准确的。但是,
[]
仍然不是您在关于所显示代码的回答中所描述的JSON数组。我的主要观点是,根据解析的lang/env,区分序列化状态和它可以解析为什么非常重要。我想我现在明白了您的意思。感谢您为我澄清这一点。无论是否使用jQuery,这都是最好的为没有JSON API的浏览器提供JSON API。在包含jQuery之前,我总是先包含Crockford的lib,这样jQuery就可以始终使用JSON API,而不会使用eval或其他技巧。
var data = '[{"SponsorID":382,"SponsorName":"Test Name","MonthEndReport":true,"AccountingManager":"Me","UnboundProperties":[],"State":16}]';
data = JSON.parse(data);
alert(data.SponsorName);
var data = [{"SponsorID":382,"SponsorName":"Test Name","MonthEndReport":true,"AccountingManager":"Me","UnboundProperties":[],"State":16}];

alert(data[0].SponsorID);