我试图遍历以下json数组:
{
"id": "1",
"msg": "hi",
"tid": "2013-05-05 23:35",
"fromWho": "hello1@email.se"
}, {
"id": "2",
"msg": "there",
"tid": "2013-05-05 23:45",
"fromWho": "hello2@email.se"
}
并尝试了以下
for (var key in data) {
if (data.hasOwnProperty(key)) {
console.log(data[key].id);
}
}
但由于某种原因,我只得到第一部分,id 1值。
有什么想法吗?
答案 0 :(得分:179)
您的JSON应如下所示:
var json = [{
"id" : "1",
"msg" : "hi",
"tid" : "2013-05-05 23:35",
"fromWho": "hello1@email.se"
},
{
"id" : "2",
"msg" : "there",
"tid" : "2013-05-05 23:45",
"fromWho": "hello2@email.se"
}];
您可以像这样遍历数组:
for(var i = 0; i < json.length; i++) {
var obj = json[i];
console.log(obj.id);
}
或者像这样(从Eric建议)小心IE支持
json.forEach(function(obj) { console.log(obj.id); });
答案 1 :(得分:24)
您的代码中存在一些问题,首先您的json必须如下:
var json = [{
"id" : "1",
"msg" : "hi",
"tid" : "2013-05-05 23:35",
"fromWho": "hello1@email.se"
},
{
"id" : "2",
"msg" : "there",
"tid" : "2013-05-05 23:45",
"fromWho": "hello2@email.se"
}];
接下来,您可以像这样迭代:
for (var key in json) {
if (json.hasOwnProperty(key)) {
alert(json[key].id);
alert(json[key].msg);
}
}
它给出了完美的结果。
请参阅此处的小提琴:http://jsfiddle.net/zrSmp/
答案 2 :(得分:12)
var arr = [
{
"id": "1",
"msg": "hi",
"tid": "2013-05-05 23:35",
"fromWho": "hello1@email.se"
}, {
"id": "2",
"msg": "there",
"tid": "2013-05-05 23:45",
"fromWho": "hello2@email.se"
}
];
forEach方法,便于实施。
arr.forEach(function(item){
console.log('ID: ' + item.id);
console.log('MSG: ' + item.msg);
console.log('TID: ' + item.tid);
console.log('FROMWHO: ' + item.fromWho);
});
答案 3 :(得分:9)
因为我已经开始研究它了:
var data = [{
"id": "1",
"msg": "hi",
"tid": "2013-05-05 23:35",
"fromWho": "hello1@email.se"
}, {
"id": "2",
"msg": "there",
"tid": "2013-05-05 23:45",
"fromWho": "hello2@email.se"
}]
这个功能
var iterateData =function(data){ for (var key in data) {
if (data.hasOwnProperty(key)) {
console.log(data[key].id);
}
}};
你可以这样称呼它
iterateData(data); // write 1 and 2 to the console
<2>在Erics评论后更新
正如eric指出a for in
loop for an array can have unexpected results。引用的问题有关于利弊的冗长讨论。
但似乎下面的内容很节省:
for(var i = 0; i < array.length; i += 1)
尽管chrome中的测试具有以下结果
var ar = [];
ar[0] = "a";
ar[1] = "b";
ar[4] = "c";
function forInArray(ar){
for(var i = 0; i < ar.length; i += 1)
console.log(ar[i]);
}
// calling the function
// returns a,b, undefined, undefined, c, undefined
forInArray(ar);
.forEach()
至少在chrome 30中,这可以按预期工作
var logAr = function(element, index, array) {
console.log("a[" + index + "] = " + element);
}
ar.forEach(logAr); // returns a[0] = a, a[1] = b, a[4] = c
for in
at the mdn for in
less bad 答案 4 :(得分:6)
如果要迭代它,它必须是一个数组。您很可能错过[
和]
。
var x = [{
"id": "1",
"msg": "hi",
"tid": "2013-05-05 23:35",
"fromWho": "hello1@email.se"
}, {
"id": "2",
"msg": "there",
"tid": "2013-05-05 23:45",
"fromWho": "hello2@email.se"
}];
var $output = $('#output');
for(var i = 0; i < x.length; i++) {
console.log(x[i].id);
}
查看这个jsfiddle:http://jsfiddle.net/lpiepiora/kN7yZ/
答案 5 :(得分:6)
它正在发挥作用。我刚刚为JSON数据添加了方括号。数据是:
var data = [
{
"id": "1",
"msg": "hi",
"tid": "2013-05-05 23:35",
"fromWho": "hello1@email.se"
},
{
"id": "2",
"msg": "there",
"tid": "2013-05-05 23:45",
"fromWho": "hello2@email.se"
}
]
循环是:
for (var key in data) {
if (data.hasOwnProperty(key)) {
alert(data[key].id);
}
}
答案 6 :(得分:5)
有点晚了,但我希望我可以帮助别人:D
你的json需要看起来像Niklas已经说过的话。然后你走了:
for(var key in currentObject){
if(currentObject.hasOwnProperty(key)) {
console.info(key + ': ' + currentObject[key]);
}
}
如果你有一个多维数组,这是你的代码:
for (var i = 0; i < multiDimensionalArray.length; i++) {
var currentObject = multiDimensionalArray[i]
for(var key in currentObject){
if(currentObject.hasOwnProperty(key)) {
console.info(key + ': ' + currentObject[key]);
}
}
}
答案 7 :(得分:3)
您的数据片段需要扩展一点,并且必须采用这种方式才能正确使用json。注意,我只添加了数组名称属性“ item”
{"item":[
{
"id": "1",
"msg": "hi",
"tid": "2013-05-05 23:35",
"fromWho": "hello1@email.se"
}, {
"id": "2",
"msg": "there",
"tid": "2013-05-05 23:45",
"fromWho": "hello2@email.se"
}]}
您的Java脚本很简单
var objCount = json.item.length;
for ( var x=0; x < objCount ; xx++ ) {
var curitem = json.item[x];
}
答案 8 :(得分:2)
好吧,我只能看到你有两个JSON对象,用逗号分隔。如果它们都在一个数组([...]
)内,那就更有意义了。
并且,如果它们位于数组内部,那么您将只使用标准的“for var i = 0 ...”类型的循环。实际上,我认为它将尝试检索字符串“1”的“id”属性,然后检索“hi”的“id”,依此类推。
答案 9 :(得分:2)
var data = [{
"id": "1",
"msg": "hi",
"tid": "2013-05-05 23:35",
"fromWho": "hello1@email.se"
}, {
"id": "2",
"msg": "there",
"tid": "2013-05-05 23:45",
"fromWho": "hello2@email.se"
}];
data.map((item, i) => console.log('Index:', i, 'Id:', item.id));
为了涵盖财产"id"
不存在的情况,请使用filter
:
var data = [{
"id": "1",
"msg": "hi",
"tid": "2013-05-05 23:35",
"fromWho": "hello1@email.se"
}, {
"id": "2",
"msg": "there",
"tid": "2013-05-05 23:45",
"fromWho": "hello2@email.se"
}, {
"msg": "abcde",
"tid": "2013-06-06 23:46",
"fromWho": "hello3@email.se"
}];
data.filter(item=>item.hasOwnProperty('id'))
.map((item, i) => console.log('Index:', i, 'Id:', item.id));
答案 10 :(得分:0)
尝试
var json = [{
"id" : "1",
"msg" : "hi",
"tid" : "2013-05-05 23:35",
"fromWho": "hello1@email.se"
},
{
"id" : "2",
"msg" : "there",
"tid" : "2013-05-05 23:45",
"fromWho": "hello2@email.se"
}];
json.forEach((item) => {
console.log('ID: ' + item.id);
console.log('MSG: ' + item.msg);
console.log('TID: ' + item.tid);
console.log('FROMWHO: ' + item.fromWho);
});
答案 11 :(得分:0)
非常简单的方法!
var tire_price_data = JSON.parse('[{"qty":"250.0000","price":"0.390000"},{"qty":"500.0000","price":"0.340000"},{"qty":"1000.0000","price":"0.290000"}]');
tire_price_data.forEach(function(obj){
console.log(obj);
console.log(obj.qty);
console.log(obj.price);
})
谢谢。