You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从表的JSON列数组中提取符合category='B'条件的JSON对象?

提取JSON数组中符合条件的对象

针对不同数据库,提供对应的查询方案,实现从JSON数组中筛选出category='B'的JSON对象:

PostgreSQL

PostgreSQL支持jsonb_array_elements函数展开JSON数组,再筛选条件,最后生成目标对象:

SELECT 
  jsonb_build_object('my_value', elem->>'my_value', 'category', elem->>'category') AS target_obj
FROM 
  your_table,
  jsonb_array_elements(your_json_column::jsonb) AS elem
WHERE 
  elem->>'category' = 'B';

如果每行仅存在一个category='B'的对象,也可以用jsonb_path_query简化查询:

SELECT 
  jsonb_path_query(your_json_column::jsonb, '$[*] ? (@.category == "B")') AS target_obj
FROM your_table;

MySQL

MySQL使用JSON_TABLE展开数组并提取字段,再筛选匹配项:

SELECT 
  JSON_OBJECT('my_value', jt.my_value, 'category', jt.category) AS target_obj
FROM 
  your_table,
  JSON_TABLE(
    your_json_column,
    '$[*]' COLUMNS (
      my_value INT PATH '$.my_value',
      category VARCHAR(10) PATH '$.category'
    )
  ) AS jt
WHERE jt.category = 'B';

也可以通过JSON_SEARCH定位索引后直接提取:

SELECT 
  JSON_EXTRACT(
    your_json_column,
    CONCAT('$[', JSON_UNQUOTE(JSON_SEARCH(your_json_column, 'one', 'B', NULL, '$[*].category')), ']')
  ) AS target_obj
FROM your_table;

注:JSON_SEARCH的'one'参数表示仅返回第一个匹配项,若需提取所有匹配项可改为'all'。

SQL Server

SQL Server通过OPENJSON解析数组,筛选后返回目标JSON对象:

SELECT 
  JSON_QUERY(jt.value) AS target_obj
FROM 
  your_table
CROSS APPLY 
  OPENJSON(your_json_column) AS jt
WHERE 
  JSON_VALUE(jt.value, '$.category') = 'B';

说明:上述示例中your_table为你的表名,your_json_column为存储JSON数组的列名,请根据实际情况替换。

内容的提问来源于stack exchange,提问作者Bjarke Kingo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 03:57:14