#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:
{
является объектом, [
является Массивом.
Смотрите официальные документы.
В вашем случае первый пример — это обычный объект со свойством под названием JSON не имеет ассоциативных массивов. Второй пример — недопустимый JSON. id
. Второй пример — это ассоциативный массив с вызываемым индексом id
.
Это связано с тем, что 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
.