格式化Mysql返回的JSON数组

时间:2018-04-03 17:19:54

标签: 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命令,这应该有助于我返回值之前的标签,但不是数据的嵌套。

我不确定这是在查询前发布还是发布。

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

1 个答案:

答案 0 :(得分:0)

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字符串。