Есть ли способ иметь вложенные объекты в 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) принять второй объект стиля. Если кто-нибудь может просветить меня, я буду признателен!
{"stuff": ..., "otherstuff": ...}
{"id":2,"name": ""}
. Однако он более или менее спрашивает об этом, поэтому я не уверен.Ответы:
Вам не нужно использовать массивы.
Значения JSON могут быть массивами, объектами или примитивами (числами или строками).
Вы можете написать JSON так:
Вы можете использовать это так:
источник
Каждый объект должен быть назван внутри родительского объекта:
Таким образом, вы не можете объявить такой объект:
Должно быть
источник
У вас слишком много избыточных вложенных массивов внутри ваших данных jSON, но можно получить информацию. Хотя, как и другие говорили, вы можете очистить его.
используйте each () для обертывания внутри другого each () до последнего массива.
поскольку
result.data[0].stuff[0].onetype[0]
в jQuery вы можете сделать следующее:`
`
источник