в чем разница между { и [ в json с json_encode в php

#php #json

#php #json

Вопрос:

В чем разница между { и [ в json

модель 1:

 "cell": { "id": "3961" }
  

модель 2:

 "cell": [ "id": "3961" ]
  

как я могу перенести модель 1 на 2 через json_encode?

Комментарии:

1. Модель 2 не является допустимым JSON. Вы имели в виду «ячейку»: [ {«id»: «3961»} ] ?

2. Да, # 2 не является допустимым JSON. Разница между «{}» и «[]» заключается в том, что первое обозначает «объект» (переводится как «словарь» на многих компьютерных языках), в то время как второе обозначает «массив».

Ответ №1:

«модель 2» не является допустимым JSON. JSON допускает объекты с именованными свойствами (ваша «модель 1»), но массивы могут не иметь именованных ключей.

Поэтому json_encode не удается вывести вашу «модель 2».

Ответ №2:

{ является объектом, [ является Массивом.

Смотрите официальные документы.

В вашем случае первый пример — это обычный объект со свойством под названием id . Второй пример — это ассоциативный массив с вызываемым индексом id . JSON не имеет ассоциативных массивов. Второй пример — недопустимый JSON.

Это связано с тем, что JSON является уведомлением объекта JavaScript, а JavaScript не знает ассоциативных массивов. Вместо этого JavaScript позволяет динамически добавлять новое свойство к объекту и позволяет получить доступ к любому Объекту-свойству с помощью скобок: Object['property'] .

Итак, объекты — это (своего рода) ассоциативные массивы в JavaScript и, следовательно, в JSON.

Поскольку json_encode() -функция encodes создает JSON-строку из предоставленного объекта, вам нужно будет передать объект вместо массива.

Ответ №3:

Ваша модель 2 не является допустимым JSON. Массивы JSON не могут содержать ключи, для этого и нужны объекты в JavaScript ( {"key":"value"} )

Однако вы можете декодировать строку JSON в ассоциативные массивы PHP ( json_decode($json, TRUE) ), если хотите создавать массивы вместо объектов.

Ответ №4:

 php > echo json_encode(array('a', 'b'));
["a","b"]
php > echo json_encode(array('a' => 'A', 'b' => 'B'));
{"a":"A","b":"B"}
  

[ -> Числовой массив
{ -> Ассоциативный массив в PHP, объект в JavaScript

Комментарии:

1. Все еще не совсем корректно. Вы можете указать PHP декодировать объекты / словари JavaScript в ассоциативные массивы, но это даже не значение по умолчанию. По умолчанию PHP будет создавать экземпляры stdClass .