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": []
}
Есть ли способ кодирования данных (или определения массивов), поэтому я получаю смешанные массивы и объекты?
Ответы
Ответ 1
Создайте bar1
как объект new stdClass()
. Это будет единственным способом для json_encode()
отличить его. Это можно сделать, вызвав 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":[]}
ИЛИ с помощью typecasting:
$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":[]}
Ответ 2
Там ответ - нет. Невозможно, чтобы функция угадывала ваше намерение относительно того, какой массив должен быть массивом и какие должны быть объекты. Вы должны просто нарисовать массивы, которые вы хотите как объекты, прежде чем json_encoding их