У меня есть структура данных 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 их