Вложенные объекты JSON - мне нужно использовать все массивы?
Есть ли способ иметь вложенные объекты в JSON, поэтому мне не нужно делать массивы из всего? Для моего объекта, который будет разбираться без ошибок, мне кажется, нужна такая структура:
{"data":[{"stuff":[
{"onetype":[
{"id":1,"name":"John Doe"},
{"id":2,"name":"Don Joeh"}
]},
{"othertype":[
{"id":2,"company":"ACME"}
]}]
},{"otherstuff":[
{"thing":
[[1,42],[2,2]]
}]
}]}
Если я вывожу этот объект в переменную с именем "result", мне нужно получить доступ к вложенным объектам следующим образом:
result.data[0].stuff[0].onetype[0]
и
result.data[1].otherstuff[0].thing[0]
Это кажется неуклюжим и излишним для меня, если возможно, я предпочел бы:
result.stuff.onetype[0]
и
result.otherstuff.thing
Но как я могу использовать ключи объектов напрямую, когда все это массив? Для моего запутанного и необразованного ума что-то вроде этого было бы более уместным:
{"data":
{"stuff":
{"onetype":[
{"id":1,"name": ""},
{"id":2,"name": ""}
]}
{"othertype":[
{"id":2,"xyz": [-2,0,2],"n":"Crab Nebula","t":0,"c":0,"d":5}
]}
}
{"otherstuff":
{"thing":
[[1,42],[2,2]]
}
}
}
Я, вероятно, неправильно понял что-то фундаментальное здесь, но я не могу получить парсер jQuery (или собственный FF-парсер, используемый jQuery 1.4), чтобы принять второй объект стиля. Если кто-нибудь сможет просветить меня, мы будем с благодарностью оценены!
Ответы
Ответ 1
Вам не нужно использовать массивы.
Значения JSON могут быть массивами, объектами или примитивами (номерами или строками).
Вы можете написать JSON следующим образом:
{
"stuff": {
"onetype": [
{"id":1,"name":"John Doe"},
{"id":2,"name":"Don Joeh"}
],
"othertype": {"id":2,"company":"ACME"}
},
"otherstuff": {
"thing": [[1,42],[2,2]]
}
}
Вы можете использовать его следующим образом:
obj.stuff.onetype[0].id
obj.stuff.othertype.id
obj.otherstuff.thing[0][1] //thing is a nested array or a 2-by-2 matrix.
//I'm not sure whether you intended to do that.
Ответ 2
Каждый объект должен быть указан внутри родительского объекта:
{ "data": {
"stuff": {
"onetype": [
{ "id": 1, "name": "" },
{ "id": 2, "name": "" }
],
"othertype": [
{ "id": 2, "xyz": [-2, 0, 2], "n": "Crab Nebula", "t": 0, "c": 0, "d": 5 }
]
},
"otherstuff": {
"thing":
[[1, 42], [2, 2]]
}
}
}
Итак, вы не можете объявить объект следующим образом:
var obj = {property1, property2};
Это должно быть
var obj = {property1: 'value', property2: 'value'};
Ответ 3
У вас есть много избыточных вложенных массивов внутри ваших данных jSON, но можно получить информацию. Хотя, как говорят другие, лучше очистите его.
используйте каждый() перенос в другое каждый() до последнего массива.
для result.data[0].stuff[0].onetype[0]
вы могли бы сделать
`
$.each(data.result.data, function(index0, v) {
$.each(v, function (index1, w) {
$.each(w, function (index2, x) {
alert(x.id);
});
});
});
`