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;
  • 8
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值