我试图在一个表上进行查询,我想要选择一些列和其他一些列作为嵌套的json对象,例如,我想用它来选择用户列表' s地址作为嵌套对象。
SELECT
u.first_name, u.last_name, u.age, u.phone,
JSON_OBJECT(
'zip', a.zip,
'address', a.address,
'number', a.number,
'city', a.city,
'state', a.state
) as 'address'
FROM
tb_user u,
tb_user_address a
WHERE u.id_address = a.id
预期结果将是这样的:
[
{
first_name: 'my name',
last_name: 'my last name',
... // Some other fields
address: {
zip: '987',
address: 'street name',
... // Some other fields
}
},
{
// Another user
}
]
但是当它返回时,address
字段只是一个普通字符串,如下所示:address: "{'zip': '987', 'address': 'street name', 'city': 'cityname', 'state'...};"
并且只有这个字段(使用JSON_OBJECT
的字段)会像这样返回,其他字段没关系。
当我从sql查询返回结果时,我这样做:
$user_list = json_decode(json_encode($query_result), true);
但它也没有解决问题。有没有办法将该字符串转换为有效的json对象?
答案 0 :(得分:1)
您正在MySQL中创建地址JSON对象,因此它将作为包含其他列中JSON格式数据的字符串返回。
在对整个结果进行JSON编码之前,您可以执行以下操作将其转换为PHP数组:
$user_list = array_map(
function ($v) { return json_decode($v['address'], true); },
$query_result
);
$user_list = json_encode($user_list);