栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

查询JSON类型内的数组元素

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

查询JSON类型内的数组元素

json
在Postgres 9.3+中

json_array_elements()
通过
FROM
子句中的横向联接将函数与JSON数组嵌套在一起,并测试其元素:

WITH reports(data) AS (   VALUES ('{"objects":[{"src":"foo.png"}, {"src":"bar.png"}], "background":"background.png"}'::json)   ) SELECt *FROM   reports r, **json_array_elements(r.data# >'{objects}') obj**WHERe  obj->>'src' = 'foo.png';

该CTE(

WITH
查询)只是替代了一张桌子
reports

或者,等效于 单层 嵌套:

SELECt *FROM   reports r, **json_array_elements(r.data- >'objects') obj**WHERe  obj->>'src' = 'foo.png';

->>
->
以及
#>
操作符在手册中进行了说明。

这两个查询都使用隐式

JOINLATERAL

SQL提琴。

jsonb
在Postgres 9.4+

使用等效项

jsonb_array_elements()

更好的 是,使用新的“ contains”运算符

@>
(最好与表达式上匹配的GIN索引结合使用
data->'objects'
):

CREATE INDEX reports_data_gin_idx ON reportsUSING gin ((data->'objects') jsonb_path_ops);SELECt * FROM reports WHERe data->'objects' @> '[{"src":"foo.png"}]';

由于键

objects
包含一个JSON 数组 ,因此我们需要匹配搜索项中的结构并将数组元素也包装在方括号中。搜索纯记录时,请放下数组括号。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/399808.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号