我试图在一个JSON对象中返回多个数组,并且语法有些困难。 Android应用程序从多个表接收更新,我希望在一个响应中返回。
目前,我正在编码各种结果集:
$json=json_encode(array($table1, $table2, $table3, $table4, $table5, $table6));
以下列格式返回数据:
[{"table1":[{...}]},{"table2":[{...}]},...]
在Android代码中,我希望能够将其解析为JSONObject,然后我可以通过名称检索每个数组,而不是将其解析为JSONArray并按位置检索每个子数组。 JSON响应看起来像这样:
{{"table1":[{...}]},{"table2":[{...}]},...}
似乎我需要做的就是将结果数组包装在一个对象中,而不是PHP端的数组,但是尽管我已经设法盲目地拼凑了足够的PHP代码来实现这一点,但我可以&似乎找出了最后一步。
答案 0 :(得分:5)
你的最后一个例子是无效的JSON,花括号总是指带有键的对象;相反,你将它视为一个数组。如果你想要一个对象,那么在PHP中将键添加到数组中,如下所示:
$json=json_encode(array('a' => $table1, 'b' => $table2, 'c' => $table3));
然后会产生
{"a":{"table1":[{...}]},"b":{"table2":[{...}]},...}
这似乎是你想要的。
答案 1 :(得分:0)
@Anonymous回答了诀窍。为了澄清,我不得不清理我以前做的事情,所以不要这样做:
$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,...);