json_decode对mysql json_object的结果不起作用

时间:2018-04-02 19:16:51

标签: php mysql json

我试图在一个表上进行查询,我想要选择一些列和其他一些列作为嵌套的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对象?

1 个答案:

答案 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);