Как json_encode сложные структуры данных в PHP?

#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;
  

В качестве альтернативы, вы можете просто использовать объекты с самого начала для этих элементов вместо массивов.