我无法弄清楚如何使用PHP和MySQL创建多级JSON输出。
我有这个问题(针对这个问题进行了简化)
$query = "SELECT
1 as id,
JSON_OBJECT('key1', 1, 'key2', 'abc') as json1";
我变成了一个数组
while ($row = mysqli_fetch_assoc($result)) {
$resultArray[] = $row;
}
return $resultArray;
然后使用json_encode:
echo json_encode($result);
这让我
[
{
id: "1",
json1: "{"key1": 1, "key2": "abc"}"
}
]
即,变量以字符串形式返回。
我想要实现的是将变量json_test作为第二级JSON,如下所示:
[
{
id: "1",
json1:
{
key1: 1,
key2: "abc"
}
}
]
我尝试过关于这个网站的提示,但没有快乐:
JSON_ARRAY(GROUP_CONCAT(JSON_OBJECT('key1', 1, 'key2', 'abc'))) AS json2
给了我
json2: "["{\"key1\": 1, \"key2\": \"abc\"}"]",
和
CAST(CONCAT('[',GROUP_CONCAT(JSON_OBJECT('key1', 1, 'key2', 'abc')),']') AS JSON) AS json3
给了我
json3: "[{"key1": 1, "key2": "abc"}]"
非常感谢任何提示。
我使用的是PHP 7.0.25和MySQL 5.7.20。
答案 0 :(得分:1)
JSON_OBJECT
作为字符串返回给PHP(prodigitalson注释)
您希望将所有数据都作为关联数组。
为了做到这一点,在您发布的示例中,json1
必须通过json_decode
传递。
while ($row = mysqli_fetch_assoc($result)) {
$row['json1'] = json_decode( $row['json1'], true ); // <----
$resultArray[] = $row;
}
return $resultArray;
现在你应该得到想要的结果:
echo json_encode($resultArray);
答案 1 :(得分:0)
使用MySQL构建所需的结构可以这样做:
mysql> SELECT JSON_OBJECT('id', 1, 'json1', JSON_OBJECT('key1', 1, 'key2', 'abc')) AS obj;
+------------------------------------------------+
| obj |
+------------------------------------------------+
| {"id": 1, "json1": {"key1": 1, "key2": "abc"}} |
+------------------------------------------------+
1 row in set (0.00 sec)
在PHP中,我们可以从JSON转到数组:
php > var_dump(json_decode('{"id":1,"json1":{"key1":1,"key2":"abc"}}', TRUE));
array(2) {
["id"]=>
int(1)
["json1"]=>
array(2) {
["key1"]=>
int(1)
["key2"]=>
string(3) "abc"
}
}
或者数组到JSON:
php > $tmp = ['id' => 1, 'json1' => ['key1' => 1, 'key2' => 'abc']];
php > var_dump($tmp);
array(2) {
["id"]=>
int(1)
["json1"]=>
array(2) {
["key1"]=>
int(1)
["key2"]=>
string(3) "abc"
}
}
php > print(json_encode($tmp));
{"id":1,"json1":{"key1":1,"key2":"abc"}}