#php #json
#php #json
Вопрос:
У меня есть структура данных, которая на верхнем уровне является словарем и содержит списки. Типичным примером может быть:
array('foo' => array(1, 2, 3),
'bar' => array(4, 5, 6));
Словарь верхнего уровня может не иметь атрибутов, а внутренние списки могут быть пустыми.
Эти структуры должны быть закодированы в формате JSON. Проблема в том, что PHP не делает различий между пустым словарем и пустым списком, поэтому он не знает, следует ли отображать array () как ‘{}’ или ‘[]’. Я могу принудительно использовать ‘{}’, выполнив
json_encode($object, JSON_FORCE_OBJECT);
но это оказывает
array('foo' => array());
как ‘{«foo»: {}}’, когда это должно быть ‘{«foo»: []}’. Если я опущу JSON_FORCE_OBJECT, то
array();
отображается как ‘[]’, когда это должно быть ‘{}’. Какое есть решение, кроме как отказаться от PHP и написать это на нормальном языке?
Ответ №1:
Выполните итерацию по вашим данным и замените все array ()ы, которые должны быть объектами, на
$objectItem = new stdClass();
или сделать
$objectItem = (object)$objectItem;
В качестве альтернативы, вы можете просто использовать объекты с самого начала для этих элементов вместо массивов.