使用PHP和MySQL创建多级JSON

使用PHP和MySQL创建多级JSON,php,mysql,arrays,json,Php,Mysql,Arrays,Json,我不知道如何使用PHP和MySQL创建多级JSON输出 我有这个问题(简化了这个问题) 我把它变成一个数组 while ($row = mysqli_fetch_assoc($result)) { $resultArray[] = $row; } return $resultArray; 然后使用json_编码: echo json_encode($result); 这让我抓狂 [ { id: "1", json1: "{"key1":

我不知道如何使用PHP和MySQL创建多级JSON输出

我有这个问题(简化了这个问题)

我把它变成一个数组

while ($row = mysqli_fetch_assoc($result)) {
        $resultArray[] = $row;
}
return $resultArray;
然后使用json_编码:

echo json_encode($result);
这让我抓狂

[
    {
        id: "1",
        json1: "{"key1": 1, "key2": "abc"}"
    }
]
i、 例如,变量作为字符串返回

我想要实现的是将变量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\"}"]",

给我

json3: "[{"key1": 1, "key2": "abc"}]"
如有任何提示,我们将不胜感激


我使用的是PHP 7.0.25和MySQL 5.7.20。

使用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"}}

JSON\u对象
作为字符串返回给PHP(如注释所示)

您希望将所有数据作为关联数组

为此,在您发布的示例中,
json1
必须通过
json\u decode
传递

while ($row = mysqli_fetch_assoc($result)) {
        $row['json1'] = json_decode( $row['json1'], true ); // <----
        $resultArray[] = $row;
}
return $resultArray;

谢谢你的回答!不幸的是,您的建议似乎不起作用-这就是我得到的:[{obj:{“id”:1,“json1”:{“key1”:1,“key2”:“abc”}}}]正如您所看到的,我直接从命令行PHP和MySQL复制和粘贴了。什么是您尚未满足的需求?您正在运行什么,以及期望的结果是什么?您当前正在将对象作为字符串输入。如果您使用json_decode将其转换为一个对象,那么您可以将其作为密钥输入,并对整个过程进行重新编码。如果你提供了你的代码,我可以告诉你这看起来怎么样mysqli不会将一个
JSON_对象
投射到一个php数组或stdObject。如果你想为输出重新编码,你需要在循环中调用
json\u decode
。谢谢!
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"}}
while ($row = mysqli_fetch_assoc($result)) {
        $row['json1'] = json_decode( $row['json1'], true ); // <----
        $resultArray[] = $row;
}
return $resultArray;
echo json_encode($resultArray);