Я пытаюсь вернуть несколько массивов в один объект JSON и с некоторыми трудностями с синтаксисом. Приложение Android получает обновления из нескольких таблиц, которые я хочу получить в одном ответе.
В настоящее время я так кодирую различные результирующие наборы:
$json=json_encode(array($table1, $table2, $table3, $table4, $table5, $table6));
Данные возвращаются в таком формате:
[{"table1":[{...}]},{"table2":[{...}]},...]
В коде Android я хотел бы проанализировать его как JSONObject, из которого я могу получить каждый массив по имени вместо того, чтобы разбирать его как JSONArray и получать каждый дополнительный массив по позиции. Ответ JSON будет выглядеть следующим образом:
{{"table1":[{...}]},{"table2":[{...}]},...}
Кажется, все, что мне нужно сделать, это обрезать массивы результатов в объекте, а не массивом на стороне PHP, но, хотя мне удалось вслепую сколотить достаточно PHP-код, чтобы зайти так далеко, я не могу показаться это последний шаг.
Ваш последний пример недействителен JSON, фигурные скобки всегда означают объект с ключами; вместо этого вы рассматриваете его как массив. Если вы хотите объект, то добавьте в него ключи массива в PHP:
$json=json_encode(array('a' => $table1, 'b' => $table2, 'c' => $table3));
Тогда это даст
{"a":{"table1":[{...}]},"b":{"table2":[{...}]},...}
Кажется, что вы хотите.
@ Анонимный ответ сделал трюк. Чтобы уточнить, мне пришлось очистить то, что я делал ранее, поэтому вместо этого:
$table1['table1'] =$stmt_table1->fetchAll(PDO::FETCH_ASSOC); $table2['table2'] =$stmt_table2->fetchAll(PDO::FETCH_ASSOC); ... $json=json_encode(array($table1, $table2, $table3, $table4, $table5, $table6));
У меня теперь есть следующее:
$table1_results =$stmt_table1->fetchAll(PDO::FETCH_ASSOC); $table2_results =$stmt_table2->fetchAll(PDO::FETCH_ASSOC); ... $json=json_encode(array('table1' => $table1_results , 'table2' => $table2_results,...);