在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);