Как создать объект JSON с несколькими массивами?
Я никогда не использовал JSON, поэтому я не знаком с его синтаксисом.
В настоящий момент у меня есть несколько массивов, содержащих разные фрагменты данных.
Я хотел бы создать один объект JSON, содержащий несколько массивов с несколькими фрагментами данных.
например.
Объект, называемый автомобилями, содержащий несколько массивов, каждый для другого автомобиля. В каждом массиве будет модель автомобиля вместе с некоторыми другими типами данных, например. количество дверей (на самом деле не имеет значения, это просто вымышленный пример.)
Было бы очень полезно, если бы кто-нибудь объяснил синтаксис примером.
Ответы
Ответ 1
На самом внешнем уровне объект JSON начинается с {
и заканчивается на }
.
Пример данных:
{
"cars": {
"Nissan": [
{"model":"Sentra", "doors":4},
{"model":"Maxima", "doors":4}
],
"Ford": [
{"model":"Taurus", "doors":4},
{"model":"Escort", "doors":4}
]
}
}
Если JSON назначается переменной, называемой данными, доступ к ней будет выглядеть следующим образом:
data.cars['Nissan'][0].model // Sentra
data.cars['Nissan'][1].model // Maxima
data.cars['Nissan'][2].doors // 4
for (var make in data.cars) {
for (var i = 0; i < data.cars[make].length; i++) {
var model = data.cars[make][i].model;
var doors = data.cars[make][i].doors;
alert(make + ', ' + model + ', ' + doors);
}
}
Другой подход (использование ассоциативного массива для моделей автомобилей, а не индексированного массива):
{
"cars": {
"Nissan": {
"Sentra": {"doors":4, "transmission":"automatic"},
"Maxima": {"doors":4, "transmission":"automatic"}
},
"Ford": {
"Taurus": {"doors":4, "transmission":"automatic"},
"Escort": {"doors":4, "transmission":"automatic"}
}
}
}
data.cars['Nissan']['Sentra'].doors // 4
data.cars['Nissan']['Maxima'].doors // 4
data.cars['Nissan']['Maxima'].transmission // automatic
for (var make in data.cars) {
for (var model in data.cars[make]) {
var doors = data.cars[make][model].doors;
alert(make + ', ' + model + ', ' + doors);
}
}
Edit:
Исправление: объект JSON начинается с {
и заканчивается на }
, но он также действителен, чтобы иметь массив JSON (на самом внешнем уровне), который начинается с [
и заканчивается на ]
.
Кроме того, были исправлены значительные ошибки синтаксиса в исходных данных JSON: все имена ключей в объекте JSON должны быть в двойных кавычках, а все строковые значения в объекте JSON или в массиве JSON также должны быть в двойных кавычках.
См:
Ответ 2
Хорошая книга, которую я читаю: Профессиональный JavaScript для веб-разработчиков Николаса К. Закаса 3-го издания содержит следующую информацию о синтаксисе JSON:
"Синтаксис JSON позволяет отображать три типа значений".
Относительно интересующего вас массива, он говорит:
"Массивы представлены в JSON с использованием символьной записи массива из JavaScript. Например, это массив в JavaScript:
var values = [25, "hi", true];
Вы можете представить этот же массив в JSON с использованием аналогичного синтаксиса:
[25, "hi", true]
Обратите внимание на отсутствие переменной или точки с запятой. Массивы и объекты могут использоваться вместе для представления более сложных наборов данных, таких как:
[
{
"title": "Professional JavaScript",
"authors": [
"Nicholas C. Zakas"
],
edition: 3,
year: 2011
},
{
"title": "Professional JavaScript",
"authors": [
"Nicholas C.Zakas"
],
edition: 2,
year: 2009
},
{
"title": "Professional Ajax",
"authors": [
"Nicholas C. Zakas",
"Jeremy McPeak",
"Joe Fawcett"
],
edition: 2,
year: 2008
}
]
Этот массив содержит несколько объектов, представляющих книги. Каждый объект имеет несколько ключей, один из которых является "авторами", который является другим массивом. Объекты и массивы - это, как правило, элементы верхнего уровня структуры данных JSON (даже если это не требуется) и могут использоваться для создания большого количества структур данных.
Чтобы сериализовать (преобразовать) объект JavaScript в строку JSON, вы можете использовать метод строкового объекта JSON. Для примера от Марка Линуса ответ:
var cars = [{
color: 'gray',
model: '1',
nOfDoors: 4
},
{
color: 'yellow',
model: '2',
nOfDoors: 4
}];
Автомобили теперь являются объектами JavaScript. Чтобы преобразовать его в объект JSON, вы можете сделать:
var jsonCars = JSON.stringify(cars);
Что дает:
"[{"color":"gray","model":"1","nOfDoors":4},{"color":"yellow","model":"2","nOfDoors":4}]"
Чтобы сделать обратное, преобразовать объект JSON в объект JavaScript (это называется синтаксический анализ), вы должны использовать метод parse(). Найдите эти термины, если вам нужна дополнительная информация... или получите книгу, у нее много примеров.
Ответ 3
Другой пример:
[
[
{
"@id":1,
"deviceId":1,
"typeOfDevice":"1",
"state":"1",
"assigned":true
},
{
"@id":2,
"deviceId":3,
"typeOfDevice":"3",
"state":"Excelent",
"assigned":true
},
{
"@id":3,
"deviceId":4,
"typeOfDevice":"júuna",
"state":"Excelent",
"assigned":true
},
{
"@id":4,
"deviceId":5,
"typeOfDevice":"nffjnff",
"state":"Regular",
"assigned":true
},
{
"@id":5,
"deviceId":6,
"typeOfDevice":"44",
"state":"Excelent",
"assigned":true
},
{
"@id":6,
"deviceId":7,
"typeOfDevice":"rr",
"state":"Excelent",
"assigned":true
},
{
"@id":7,
"deviceId":8,
"typeOfDevice":"j",
"state":"Excelent",
"assigned":true
},
{
"@id":8,
"deviceId":9,
"typeOfDevice":"55",
"state":"Excelent",
"assigned":true
},
{
"@id":9,
"deviceId":10,
"typeOfDevice":"5",
"state":"Excelent",
"assigned":true
},
{
"@id":10,
"deviceId":11,
"typeOfDevice":"5",
"state":"Excelent",
"assigned":true
}
],
1
]
Считать массив
$.each(data[0], function(i, item) {
data[0][i].deviceId + data[0][i].typeOfDevice + data[0][i].state + data[0][i].assigned
});
Используйте http://www.jsoneditoronline.org/, чтобы лучше понять код JSON
Ответ 4
var cars = [
manufacturer: [
{
color: 'gray',
model: '1',
nOfDoors: 4
},
{
color: 'yellow',
model: '2',
nOfDoors: 4
}
]
]
Ответ 5
Вы можете создать массив JSON с помощью:
String jsonString = "";
JSONArray array = (JSONArray) new JSONTokener(jsonString).nextValue();