Я пытаюсь передать массив объектов, таких как "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 ]

Массив без {} не работает. Я не хочу создавать массив массивов здесь, так зачем мне оборачивать их в {}

2
Mona Coder 21 Авг 2018 в 02:03

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 */ ]
}
2
iPirat 20 Авг 2018 в 23:11

Может быть, вы пришли из 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

1
Hero Wanders 20 Авг 2018 в 23:29

{} Представляет объект, а [] представляет массив.

Вы можете изменить свои данные в приведенном ниже примере, если у игрока может быть только одна машина.

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];

Надеюсь, это поможет вам с вашим веб-приложением / сайтом :)

1
Nick Taras 21 Авг 2018 в 12:54

Массивы против объектов

В 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}] - , которые будет массив из трех отдельных, не связанных между собой объектов.

1
Peteris 20 Авг 2018 в 23:10

Ваш код не может работать, потому что вы пытаетесь создать массив типа Object, а в Javascript объект обернут в теги {}

1
Samuel Roberto 20 Авг 2018 в 23:09
51939566