Intereting Posts
Конструктор запросов базы данных иногда возвращает массив вместо объекта, запущенного как задание в очереди Использование Apostrophe в значении MySQL ENUM, которое будет заполнять поле со списком HTML для поиска в базе данных отображение Drupal без шаблона страницы вокруг него mysql_insert_id альтернатива postgresql Как отлаживать PHP с netbeans и Xdebug PHP Поздняя статическая привязка в синглтоне реализация tinymce с php PHP preg_replace шаблон работает только, если его неправильно? Используя GD в PHP, как я могу сделать прозрачный водяной знак PNG в PNG и GIF-файлах? (Файлы JPG работают нормально) Почему бесконечно рекурсивная функция в PHP вызывает segfault? Массив Php Mysql NOT IN влияет только на первый результат в массиве php: конвертировать миллисекунды на сегодняшний день php overload = operator Запрос SPARQL для получения всех родительских узлов узла Эффективная навигация по сайту с помощью CodeIgniter

PHP json_encode – вывод смешанного объекта и массива JSON_FORCE_OBJECT

У меня есть структура данных PHP, которую я хочу кодировать JSON. Он может содержать несколько пустых массивов, некоторые из которых должны быть закодированы как массивы, а некоторые из них должны быть закодированы как объекты.

Например, скажем, у меня есть эта структура данных:

$foo = array( "bar1" => array(), // Should be encoded as an object "bar2" => array() // Should be encoded as an array ); 

Я хотел бы кодировать это в:

 { "bar1": {}, "bar2": [] } 

Но если я использую json_encode($foo, JSON_FORCE_OBJECT) я получу объекты как:

 { "bar1": {}, "bar2": {} } 

И если я использую json_encode($foo) я получу массивы как:

 { "bar1": [], "bar2": [] } 

Есть ли способ кодирования данных (или определения массивов), поэтому я получаю смешанные массивы и объекты?

Создайте bar1 как new stdClass() . Это единственный способ для json_encode() отличить его. Это можно сделать, вызвав new stdClass() или new stdClass() его с помощью (object)array()

 $foo = array( "bar1" => new stdClass(), // Should be encoded as an object "bar2" => array() // Should be encoded as an array ); echo json_encode($foo); // {"bar1":{}, "bar2":[]} 

ИЛИ путем типирования:

 $foo = array( "bar1" => (object)array(), // Should be encoded as an object "bar2" => array() // Should be encoded as an array ); echo json_encode($foo); // {"bar1":{}, "bar2":[]} 

Там ответ – нет. Невозможно, чтобы функция угадывала ваше намерение относительно того, какой массив должен быть массивом и какие должны быть объекты. Вы должны просто нарисовать массивы, которые вы хотите как объекты, прежде чем json_encoding их