mysql - 将 Mysql 返回的数组格式化为 JSON

标签 mysql arrays json

我正在执行一个 mysql 查询,该查询根据提供的 ID 从 3 个表中提取相关数据。 当我尝试格式化 sql 查询时,问题就出现了,以便当我将结果数组转换为 JSON 对象时,数据可以正确嵌套。

到目前为止我的 SQL 查询:

  select * from Players join SchoolData on Players.School = SchoolData.ID join LocationData on SchoolData.Location = LocationData.ID where Players.ID =%d

当我 JSONify 上述查询的结果时,我得到:

{
  "data": [
    {
      "City": "San Diego",
      "Height": 77,
      "ID": 7,
      "Location": 7,
      "Mascot": "Aztecs",
      "Name": "San Diego State Aztecs",
      "School": 11,
      "State": "CA",
      "Weight": 196
    }
  ]
}

我试图让我的结果看起来像下面的示例,其中嵌套了从其他表中提取的数据。

 {
    “data”:[
        {
            “student”:
                {
                “id”:xxx-xxx-xxx, 
                “name”: “name1”, 
                “school”: 
                    {
                        “id”:xxxx, 
                        “address”:
                            {
                                “id”:xxx, 
                                “city”: “mycity”, 
                                “state”: “OH”
                            }, 

                        “name”: “myschool”, 
                        “mascot”: “wildcats”
                    }, 
                “height”: 72, 
                “weight”: 180
        },
    ]
}

我一直在看FOR JSON命令(在 SQL 中使用)而不是选择 *我只能使用 AS我的查询中的命令应该有助于在返回值之前处理我的标签,但不会帮助处理数据的嵌套。

我只是不确定这是在查询前还是在查询后完成的。

更新 我发现以下 mysql 函数: https://dev.mysql.com/doc/refman/5.7/en/json-creation-functions.html但我不确定这是否是我正在寻找的。

最佳答案

SELECT
 std.id, std.name, sch.id, add.id, add.city, add.state, sch.name, sch.mascot, std.height, std.weight 
FROM
student std LEFT JOIN school sch ON < join condition >
LEFT JOIN address ON < join condition >
FOR JSON AUTO

尝试这样的操作,FOR JSON AUTO 应该将其转换为您想要的 JSON 字符串。

关于mysql - 将 Mysql 返回的数组格式化为 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49635811/

相关文章:

Python - 在 'array' 中寻找最低位置

java - Moshi 判断JSON是数组还是单个对象

Php Scandir 到 Mysql 哪个是好的做法?

来自mysql的Php多维数组

java - mysql jdbc 驱动程序无法识别 latin1 字符

多对多关系的 CREATE TABLE 上的 MySQL 错误

php - 命令不同步;你现在不能运行这个命令

java - 如何从不同的数组中找到与数组的最大编号相关的索引?

c++ - 为什么是 `std::is_constructible_v<int[2], int, int> == false`

ios - 如何按位置将json数组保存到数组中?