Подтвердить что ты не робот

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": []
}

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

4b9b3361

Ответ 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 их