Функция json_encode не возвращает фигурные скобки {}, когда массив пуст в php
У меня есть этот код
$status = array(
"message"=>"error",
"club_id"=>$_club_id,
"status"=>"1",
"membership_info"=>array(),
);
echo json_encode($status);
Эта функция возвращает json:
{"message":"error","club_id":275,"status":"1","membership_info":[]}
Но мне нужен json вот так:
{"message":"error","club_id":275,"status":"1","membership_info":{}}
Ответы
Ответ 1
используйте параметр JSON_FORCE_OBJECT
в json_encode
:
json_encode($status, JSON_FORCE_OBJECT);
Документация
JSON_FORCE_OBJECT (integer) Выводит объект, а не массив, когда используется неассоциативный массив. Особенно полезно, когда получатель вывода ожидает объект, а массив пуст. Доступно с PHP 5.3.0.
Или, если вы хотите сохранить ваши "другие" массивы внутри вашего объекта, не используйте предыдущий ответ, просто используйте это:
$status = array(
"message"=>"error",
"club_id"=>$_club_id,
"status"=>"1",
"membership_info"=> new stdClass()
);
Ответ 2
$status = array(
"message"=>"error",
"club_id"=>$_club_id,
"status"=>"1",
"membership_info"=>(object) array(),
);
Извлекая массив в объект, json_encode
всегда будет использовать фигурные скобки вместо скобок для значения (даже если оно пусто).
Это полезно, когда нельзя использовать JSON_FORCE_OBJECT
, и когда вы не можете (или не хотите) использовать фактический объект для значения.
Ответ 3
Нет никакой разницы в PHP между массивом и "объектом" (в смысле JSON этого слова). Если вы хотите, чтобы все массивы были закодированы как объекты JSON, установите флаг JSON_FORCE_OBJECT
, доступный с PHP 5.3. См. http://php.net/json_encode. Обратите внимание, что это применимо ко всем массивам.
В качестве альтернативы вы можете использовать объекты в своем PHP-коде вместо массивов:
$data = new stdClass;
$data->foo = 'bar';
...
Может быть, проще обрабатывать граничный случай пустых массивов на стороне клиента.