我有来自服务器的这个json数据
{
"store":[{"skey":"asdsad123das","name":"Store1"}, {"skey":"3308d976d2647659f130d09593be845a","name":"joji store"}],
"manager":[{"mkey":"asdsad123das","name":"manager 1"},{"mkey":"asdsad123da2","name":"Manager 2"},{"mkey":"asdsad123da3","name":"Manager 3"}]
}
我想阅读那些数据。当我试着读它时,它总是给我一个小册子。我正在做这样的事情
success: function(msg){
//alert(msg['store'].name);
for (var keys in msg)
{
//alert(keys);
alert(keys['name']);
for (var data in keys)
{
alert(data);
}
}
},
答案 0 :(得分:2)
您正在访问JSON,就像访问字典或数组一样。 JSON的工作方式不同。假设我们将JSON存储在一个我们称之为data
的变量中,如下所示:
var data = {
"store": [ {
"skey": "asdsad123das",
"name": "Store1"
}, {
"skey": "3308d976d2647659f130d09593be845a",
"name": "joji store"
} ],
"manager": [ {
"mkey": "asdsad123das",
"name": "manager 1"
}, {
"mkey": "asdsad123da2",
"name": "Manager 2"
}, {
"mkey": "asdsad123da3",
"name": "Manager 3"
} ]
};
然后我们可以像这样访问特定的密钥:
data.store[0].skey // skey of first element of store array of data object
如果要迭代data
中的数据,可以执行以下操作:
for (index in data.store) {
console.log(data.store[index]); // prints whole object
console.log(data.store[index].skey); // prints skey
console.log(data.store[index].name); // prints name
}
这个小提琴的例子:http://jsfiddle.net/u4HzZ/2/
答案 1 :(得分:2)
通常,当您拥有一个带有命名键的对象(从JSON数据或其他地方获取)时,您不太可能想要迭代这些键。您更有可能希望通过名称专门引用这些密钥。毕竟,store
与manager
完全不同,不是吗?
在大多数情况下,编写一个循环(或等同于$.each()
)在迭代存储和管理器并对它们执行相同操作时没有多大意义。你可能想对商店做一件事,对经理做另外一件事。
OTOH,根据您在这里提供的具体数据,商店记录看起来很像经理记录。每个人都有一个名字;区别在于商店有skey
而经理有mkey
。因此,仅为了记录您的数据,您可以执行以下操作(fiddle):
var data = {
"store": [
{ "skey": "asdsad123das", "name": "Store1" },
{ "skey": "3308d976d264", "name": "joji store" }
],
"manager":[
{ "mkey":"asdsad123das", "name":"manager 1" },
{ "mkey":"asdsad123da2", "name":"Manager 2" },
{ "mkey":"asdsad123da3", "name":"Manager 3" }
]
};
function success( data ) {
list( data.store, 'skey' );
console.log( ' ' );
list( data.manager, 'mkey' );
function list( array, key ) {
$.each( array, function( i, item ) {
console.log( item[key], ':', item.name );
});
}
}
success( data );
请注意,我们使用data.store
和data.manager
来访问两个单独数组中的每一个。 (我称之为data
而不是msg
,因为msg
听起来像是“消息”的缩写,而且这似乎不是任何形式的消息。)
但是由于数组本身很相似,我使用了一个通用函数来记录它们中的每一个。该函数接受一个参数,告诉它是使用skey
还是mkey
。
在处理这些数据的实际代码中,您可能会发现使用manager
所做的事情与使用store
所做的事情有很大不同,您甚至不会有这么多常用代码它们之间。但是,一旦你能够可靠地访问这些数据,你就可以从中找到它。
现在最重要的提示:您是否知道如何在您喜欢的浏览器中使用JavaScript调试器?我建议使用内置于Chrome中的内容,但也有适用于Firefox的FireBug和Internet Explorer中的内置调试程序。
如果在代码中添加debugger;
语句并在调试器打开的情况下加载页面,它将停在该行代码上,然后您可以查看locals / watch面板中的变量,以及您可以使用控制台尝试不同的表达式来查看它们的作用。您还可以单步执行代码,逐步执行功能等。您不再需要使用alert()
;你会发现这是一种更好的调试代码的方法。
这是information on the Chrome developer tools。如果您以前没有使用过这些调试工具,那么您应该认真停止其他所有操作并熟悉它们。它会获得巨大的回报。