2015-07-28 3 views
2

Я пытаюсь вернуть несколько массивов в один объект JSON и с некоторыми трудностями с синтаксисом. Приложение Android получает обновления из нескольких таблиц, которые я хочу получить в одном ответе.PHP json_encode несколько массивов в один объект

В настоящее время это, как я кодирующая различные наборы результатов:

$json=json_encode(array($table1, $table2, $table3, $table4, $table5, $table6)); 

Данные возвращаются в следующем формате:

[{"table1":[{...}]},{"table2":[{...}]},...] 

В Android код, я хотел бы быть способный анализировать его как JSONObject, из которого я могу затем получить каждый массив по имени вместо того, чтобы разбирать его как JSONArray и извлекать каждый дополнительный массив по положению. Ответ JSON будет выглядеть следующим образом, вместо:

{{"table1":[{...}]},{"table2":[{...}]},...} 

Кажется, все, что мне нужно сделать, это обернуть результаты массивов в объекте, вместо массива на стороне PHP, но хотя я сумел слепо булыжник вместе достаточно PHP-кода, чтобы получить это далеко, я не могу понять, что последний шаг.

+0

Где код, который производит различные '$ table' значения? Как выглядят эти ценности? – JAAulde

+1

для преобразования массива в объект только для 'json_encode ((object) array ...' – splash58

+0

@JAAulde значения $ table производятся следующим образом: $ table1 ['table1'] = $ stmt_table1-> fetchAll (PDO :: FETCH_ASSOC); – asorenson

ответ

4

Ваш последний пример недействителен JSON, фигурные скобки всегда означают объект с ключами; вместо этого вы рассматриваете его как массив. Если вы хотите объект, затем добавьте ключи в массив в PHP как так:

$json=json_encode(array('a' => $table1, 'b' => $table2, 'c' => $table3)); 

Это позволило бы дать

{"a":{"table1":[{...}]},"b":{"table2":[{...}]},...} 

который, кажется, что вы хотите.

0

@ Анонимный ответ сделал трюк. Просто чтобы прояснить, я должен был очистить то, что я делал раньше, так что вместо этого:

$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,...); 
Смежные вопросы