1.需求:获取jason串中name=路段2的value

1.源数据

INSERT INTO "public"."t_param_config"("id", "key", "name", "values") VALUES ('99a93e373ceb43b7bf1e3b30b71b5906', 'roadsect', '所属路段*', '[{"name":"路段1","value":"LD1"},{"name":"路段2","value":"LD2"}]');
查询SQL:
select d.element ->> 'value' as value,d.* from (
select json_array_elements(values::json) as elementfrom t_param_configwhere key = 'roadsect'
) d where d.element ->> 'name' like '%路段1%'

2.获取树形层级结构[-1.test0.screenType]的最后两位,该树形结构长度不定

1.使用reverse对数据进行倒序,然后用split截取第一个和第二个,再置反即可

reverse(split_part(reverse(s.tree),'.',2)) as test0,
reverse(split_part(reverse(s.tree),'.',1)) as screenType,

如何从PostgreSQL json中提取数组

3.查询字段全部转换为json格式输出

select array_to_json(array_agg(row_to_json(t))) from (select 字段1,字段2,字段3 from table_a) t

PGSQL 查询直接得到json

4.从json数组中按照下标拆除数据和json对象数据平铺

WITH pass_point AS (select '[{"geometry":[113.9450544,22.5095942],"imgType":"road","text":"点1","name":"深圳人才公园"},{"geometry":[113.9478610,22.5092810],"imgType":"road","text":"点2","name":"深圳湾草地公园"}]'::json as pass_point
)
select pg_typeof(geom),j.name,(geom[1]::text)::numeric as lng,(geom[2]::text)::numeric as lat
from
(select json_array_elements(t.pass_point::json)->> 'name' as name,array(select json_array_elements(json_array_elements(t.pass_point::json)-> 'geometry')) as geom
from pass_point t
) j

其中pg_typeof可以查看当前对象输出的数据是什么格式,
array()函数会把查到的参数转换为json[],之后操作就和java中按照下标取值一样

参考:
postgres 数组中获取最后一个元素的值

需要先将数组的上届值或者长度查询出来,然后用长度作为下标来获取数组中的值
SELECT (ARRAY[1,2,5,6,3])[array_upper(ARRAY[1,2,5,6,3], 1)];

PG数据库json对象以及json数组官方操作文档

5.从json数组中按照下标拆除数据和json对象数组

WITH device AS (select '[{"key": "1", "content": "dfrd85625", "deviceIdList": ["12352frd62", "2564fgtd"]}]'::json as device_Id
)
-- select * from device
select
pg_typeof(json_array_elements_text((json_array_elements(t.device_Id::json)->> 'deviceIdList')::json)) AS array_element,
json_array_elements_text((json_array_elements(t.device_Id::json)->> 'deviceIdList')::json) AS array_element
from device t

如果使用json_array_elements查询出来的会带双引号的json字段,需要使用json_array_elements_text返回才是text字段

6.往json扩展字段中加入新key值和value

准备工作:
6.1、表创建:

CREATE TABLE "public"."t_dev_json" ("id" varchar(32) COLLATE "pg_catalog"."default" NOT NULL DEFAULT md5(((uuid_generate_v4())::character varying)::text),"remark" varchar(255) COLLATE "pg_catalog"."default","isdelete" char(1) COLLATE "pg_catalog"."default","creator" varchar(32) COLLATE "pg_catalog"."default","createtime" timestamp(6) DEFAULT now(),"updater" varchar(32) COLLATE "pg_catalog"."default","updatetime" timestamp(6) DEFAULT now(),"flag" varchar(32) COLLATE "pg_catalog"."default","extra_param" jsonb,CONSTRAINT "t_dev_json_copy1_pkey6" PRIMARY KEY ("id")
)
INSERT INTO "public"."t_dev_json"("id", "remark", "isdelete", "creator", "createtime", "updater", "updatetime", "flag", "extra_param") VALUES ('1', 'json扩展字段', '0', 'admin', '2022-07-13 09:51:04.778388', NULL, '2022-07-13 09:51:04.778388', '0', NULL);

6.2、查询jsonb字段
查询数据如下,目前extra_param为null

6.3、往id=1的数据新增扩展字段{“address”:“某某路段”}
如果extra_param为null,记得一定要用COALESCE转换null值为json,否则插入新key值不会有反应

update t_dev_json t
set extra_param= COALESCE(t.extra_param, '{}') || ('{"address":"某某路段"}')::jsonb
where t.id = '1'

6.4 插入结果如下

6.5、如果需要重新更新extra_param的address字段,也可以使用同样的语句更新

update t_dev_json t
set extra_param= COALESCE(t.extra_param, '{}') || ('{"address":"某某路段更新"}')::jsonb
where t.id = '1'

6.6、删除extra_param的address字段

update t_dev_json set extra_param=extra_param - 'address' where id = '1'

参考:
Postgresql 处理jsonb字段
postgresql 实现修改jsonb字段中的某一个值

pg数据库中读取json相关推荐

  1. PG数据库中的EXPLAIN用法

    PG数据库中的EXPLAIN用法 一.EXPLAIN语法 EXPLAIN命令的主要作用是输出一个query的整个查询计划,具体语法如下: EXPLAIN [ ( option [, ...] ) ] ...

  2. 基于JDBC从数据库中读取数据,在百度地图批量标注地点

    基于JDBC从数据库中读取数据,在百度地图批量标注地点 一.相关技术 JSP,JDBC,JSON,JS,百度地图API 二.基于JDBC从数据库读取数据 见"JSP基于JDBC操作MSSQL ...

  3. php从数据库中读取特定的行

    有的时候我们需要从数据库中读取特定的数据,来检验用户的输入,这个时候需要执行的sql语句是: select * from table_name where id='num'; 需要执行这样的一个语句. ...

  4. js 中读取JSON的方

    js 中读取JSON的方法探讨 2009-03-01 16:08 js读取JSON的方法我接触到的有两种: 方法一:函数构造定义法返回 var strJSON = "{name:'json ...

  5. 【存储过程】从数据库中读取数据保存到文件中

    2019独角兽企业重金招聘Python工程师标准>>> 由于初期规划不好,项目管理的action都存入到数据库中了,而实际上应该以配置文件的形式保存的,所以现在想改过来.一条条复制是 ...

  6. dw读取access中的图片_怎样从Access数据库中读取图片?解决办法

    当前位置:我的异常网» C# » 怎样从Access数据库中读取图片?解决办法 怎样从Access数据库中读取图片?解决办法 www.myexceptions.net  网友分享于:2013-03-0 ...

  7. C# 文件保存到数据库中或者从数据库中读取文件

    首先,介绍一下保存文件到数据库中. 将文件保存到数据库中,实际上是将文件转换成二进制流后,将二进制流保存到数据库相应的字段中.在SQL Server中该字段的数据类型是Image,在Access中该字 ...

  8. asp.net mvc 从数据库中读取图片的实现代码

    首先是创建一个类,继承于ActionResult,记住要引用System.Web.Mvc命名空间,如下: public class ImageResult : ActionResult { publi ...

  9. 用jsp_servlet实现在mysql中存储图片_从数据库中读取并生成图片的Servlet

    从数据库中读取并生成图片的Servlet 作者:未知    文章来源:www.jspcn.net 发布日期:2005年01月19日 作者:邵望 日期:2000-12-24 21:44:55 大体思路 ...

  10. 我刚做的一个TreeView的CheckBox进行选中插入数据库,从数据库中读取数据后让CheckBox勾选的代码!...

    #region 绑定角色     /// <summary>     /// 绑定权限信息     /// </summary>     protected void Bind ...

最新文章

  1. Django-model中的Querysets
  2. 前端差异化项目合并打包
  3. MySQL字符串截取函数
  4. 2018 年度总结 —— 缘见
  5. js var是什么类型_JS变量的执行环境和生命周期
  6. python 线程退出_python线程退出
  7. python绘制双正切激活函数
  8. 假设计算机学院二年级,二年级计算机信息教案.doc
  9. 第八届“图灵杯”NEUQ-ACM程序设计竞赛个人赛——I题 买花
  10. 如何使用JSTL及JSTL标签库
  11. XidianOJ 1096 数的拆分
  12. java 无限循环语句_java学习之循环语句
  13. 2014 年移动设备界面设计有哪些趋势?
  14. 基于Android的BMI指数运算
  15. 【FinE】远期、期货、互换定价
  16. 一张图了解致远A6人事管理
  17. 微信小程序 day4
  18. 配置文件工具类【ConfigTools】
  19. 多个excel工作簿、工作表合并
  20. AI 人工智能 探索 (九)

热门文章

  1. Ubuntu 16.04 利用Sakurafrp工具管理多节点多隧道ID 实现 ssh 内网穿透
  2. 关于路由器老毛子Padavan固件作为主副路由桥接的问题
  3. 回归方程的拟合优度检验_线性回归模型的拟合优度检验方法分析.ppt
  4. Windows下搭建FTP服务,FileZilla Server
  5. MessageDigest 类的用法
  6. 力克“中国智造”之道,亮相第七届工业数字化论坛
  7. Linux如何刷新DNS缓存
  8. 市县城镇开发边界内1:500地形图无人机航测实践(M300 RTK+P1+大疆智图+航天远景采集软件)
  9. 计算机四级网络工程师知识点(非常全面!)
  10. 小度wifi的使用说明