Я пытаюсь передать массив объектов, таких как "make":"Ford", "trim":"escape", "year":2014
, в объект JSON car
в следующем примере
var player = {
"name":"John",
"age":30,
"car": [{"make":"Ford", "trim":"escape", "year":2014 }]
}
Но я не могу понять, почему я должен обернуть элемент в { }
. Я имею в виду, почему
"car": ["make":"Ford", "trim":"escape", "year":2014 ]
Массив без {}
не работает. Я не хочу создавать массив массивов здесь, так зачем мне оборачивать их в {}
5 ответов
Скобки {}
обозначают объект. В общем, {"make":"Ford", "trim":"escape", "year":2014 }
описывает одну машину.
Если у Джона может быть только одна машина, вы можете использовать что-то вроде этого:
var player = {
"name":"John",
"age":30,
"car": {"make":"Ford", "trim":"escape", "year":2014 }
}
Если у Джона может быть несколько машин, то вы должны использовать массив , например:
var player = {
"name":"John",
"age":30,
"cars": [{"make":"Ford", "trim":"escape", "year":2014 }, {"make":"Audi", "trim":"RS8", "year":2018 } /* more cars */ ]
}
Может быть, вы пришли из PHP, где у вас есть ассоциативные массивы? Если вы хотите иметь что-то похожее в JavaScript, просто используйте объекты! В случае, если значение car
должно напрямую содержать свойства, вы должны использовать эту запись:
"car": {"make":"Ford", "trim":"escape", "year":2014 }
В JavaScript объекты и массивы бывают разных видов: массивы представляют собой упорядоченные списки, которые индексируются только по номерам (его индексы варьируются от 0
до length - 1
), а объекты представляют собой неупорядоченные структуры с именованными свойствами (например, «make»). "," отделка "и" год "). Объекты также поддерживают перечисление / перечисление свойств, но это уже другая история.
В JSON есть несколько основных типов, которым принадлежит каждое значение. В основном это строки, числа, логические значения, массивы, объекты или null
, не более. (У JavaScript есть дополнения, такие как undefined
или символы и т. Д.).
Каждая запись массива и каждое свойство объекта, если они записаны в нотации объектов JavaScript (JSON), как вы пытаетесь это сделать, должны относиться к одному из этих типов. В частности, массив записывается в виде списка значений, разделенных запятыми. Ясно, что ваш пример "make":"Ford"
- это не одно значение, а нотация для назначения значения свойства в объекте.
Я нашел небольшое руководство по JSON: https://www.digitalocean.com/community/tutorials/an- введение к JSON
{} Представляет объект, а [] представляет массив.
Вы можете изменить свои данные в приведенном ниже примере, если у игрока может быть только одна машина.
player = {
"name":"John",
"age":30,
"car": {"make":"Ford", "trim":"escape", "year":2014 }
}
Однако, если у игрока может быть много машин, вы должны поместить объект в массив, как показано в вашем примере кода.
[{"make":"Ford", "trim":"escape", "year":2014 }]
Массивы могут хранить только один тип данных для каждой записи, например массив ['строка', 'число', 'объект'].
Однако вы обнаружите, что массивы обычно состоят из одного типа данных, например массив ['строка', 'строка', 'строка'].
Здесь комбинация массива (для хранения списка элементов) и объекта (для инкапсуляции данных элемента списка) действительно хорошо работает вместе.
Пример того, что вы можете сделать с разработанной вами переменной player:
player = {
"name":"John",
"age":30,
"cars": [
{"make":"Ford", "trim":"escape", "year":2014 },
{"make":"Audi", "trim":"escape", "year":2017 },
{"make":"Seat", "trim":"escape", "year":2018 }
]
}
Затем мы можем получить доступ к каждому объекту, используя синтаксис так:
const firstCar = player.cars[0];
const audi = player.cars[1];
const lastCar = player.cars[player.cars.length - 1];
Надеюсь, это поможет вам с вашим веб-приложением / сайтом :)
Массивы против объектов
В JSON массивы состоят из значений. Значениями могут быть строки ("year"
), числа (2014
), объекты (что-то в {}
) или другие массивы (что-то в []
). "make":"Ford"
не является одной из этих вещей, это не базовое значение, поэтому оно не может быть частью массива.
Другая вещь, которую JSON допускает, это объекты (например, {"make":"Ford", "trim":"escape", "year":2014}
) - эти состоят из пар строка: значение, например "make:"Ford"
.
Объект не является массивом; массив не является объектом. Может пригодиться спецификация JSON (https://www.json.org/).
Если вы буквально хотите передать массив объектов, как вы указали в первом предложении, то вам нужно иметь несколько отдельных объектов - не ["make":"Ford", "trim":"escape", "year":2014]
, а [{"make":"Ford"}, {"trim":"escape"}, {"year":2014}]
- , которые будет массив из трех отдельных, не связанных между собой объектов.
Ваш код не может работать, потому что вы пытаетесь создать массив типа Object, а в Javascript объект обернут в теги {}
Похожие вопросы
Новые вопросы
javascript
По вопросам программирования на ECMAScript (JavaScript / JS) и его различных диалектах / реализациях (кроме ActionScript). Включите все соответствующие теги в свой вопрос; например, [node.js], [jquery], [json] и т. д.