PHP json_encode将多个数组编码到一个对象中

时间:2015-07-28 18:13:24

标签: php json

我试图在一个JSON对象中返回多个数组,并且语法有些困难。 Android应用程序从多个表接收更新,我希望在一个响应中返回。

目前,我正在编码各种结果集:

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

以下列格式返回数据:

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

在Android代码中,我希望能够将其解析为JSONObject,然后我可以通过名称检索每个数组,而不是将其解析为JSONArray并按位置检索每个子数组。 JSON响应看起来像这样:

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

似乎我需要做的就是将结果数组包装在一个对象中,而不是PHP端的数组,但是尽管我已经设法盲目地拼凑了足够的PHP代码来实现这一点,但我可以&似乎找出了最后一步。

2 个答案:

答案 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,...);