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", "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;