仅提取 JSON 数组中对象匹配条件的 JSON_OBJECT

问题描述 投票:0回答:2

我有一个带有 JSON 列的表。 JSON 列为每一行保存一个包含 JSON 对象的 JSON 数组,如下所示

[{"my_value": 42, "category": "A"}, {"my_value": 100, "category": "C"}, {"my_value": 15, "category": "B"}, {"my_value": 123, "category": "D"}]

我想从表中选择所有行,但只选择 JSON 列中与条件匹配的部分(category='B'),这样在这种情况下我会得到 JSON 对象

{"my_value": 15, "category": "B"}
请注意包含类别 B 的 JSON 对象可以存在于任何索引中

sql mysql json json-extract
2个回答
0
投票
SELECT jsonb_array_elements(your_json_colum) AS json_obj
FROM your_table
WHERE jsonb_array_elements(your_json_colum)->>'category' = 'B';

此查询将从类别为“B”的 JSON 列中的数组中获取 JSON 对象。


0
投票

这看起来效率非常低,但你可以使用 JSON_TABLE 将数组转换为行:

SELECT test.id, temp.obj
FROM test
LEFT JOIN
    JSON_TABLE(
        json_data,
        '$[*]' COLUMNS(
            obj JSON PATH '$',
            NESTED PATH '$.category' COLUMNS (category CHAR(1) PATH '$')
        )
    ) AS temp ON temp.category = 'B';

这是一个小提琴

© www.soinside.com 2019 - 2024. All rights reserved.