PostgreSQL查询JSON中的数组PostgreSQL查询JSON中的数组
1、⾸先了解-> 和 ->>的区别
-> 返回json格式的数据
->>返回⽂本格式的数据
2、查询json⽂件
cont{"os":"Android",
"chn":"-1","dan":0,
"sex":0,
"file":"lv_statistics",
"time":"2017-01-23 16:47:54",
"honor":0,"chn_id":"-1",
typeof array"is_pay":0,
"account":"-1",
"role_id":-1,
"battle_id":1050,
"game_time":301,
"role_name":"-1",
"battle_name":"-1",
"battle_type":4,
"lv_num_json":[{"lv":8,"num":1},{"lv":9,"num":10}]
}
查询字段
select cont from student;
在这⾥插⼊图⽚描述
查询cont中的os
select cont ->>'os' os from student;
查询cont中的lv_num_json
select json_array_elements(cont ->'lv_num_json')from student;
查询cont中的lv_num_json中的lv
select json_array_elements(cont ->'lv_num_json')->'lv'from student;
3、进阶
如果json⽂件中嵌套着数组,数组中嵌套着json⽂件,json⽂件再嵌套着数组,甚⾄是多层,需要借助json_array_elements来拆分
::json 将其转化为json格式(如果不清楚可以使⽤pg_typeof()查看)
::json#>> 指向下⼀层
json_array_elements 将数组中的json⽂件拆出来
原来的lv_num_json
"lv_num_json":[{"lv":8,"num":1},{"lv":9,"num":10}]
现在将其改为
"lv_num_json":[
{
"lv":[{"brand":"品牌1","price":"200"},{"brand":"品牌2","price":"200"}],
"num":1
},
{
"lv":[{"brand":"品牌3","price":"200"},{"brand":"品牌4","price":"200"}],
"num":10
}
]
⽬标:查看lv中的brand信息
分析思路:
1、查看lv_num_json
2、将lv_num_json使⽤json_array_elements拆出来,并查看是否是json格式,如果不是,将其转化
3、查看lv,并将其使⽤json_array_elements拆出来
4、查看brand
select name, json_array_elements((json_array_elements((cont :: json#>> '{lv_num_json}')::json) -> 'lv')) -> 'brand' from student where id = 2;
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论