pg数据库中读取json
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相关推荐
- PG数据库中的EXPLAIN用法
PG数据库中的EXPLAIN用法 一.EXPLAIN语法 EXPLAIN命令的主要作用是输出一个query的整个查询计划,具体语法如下: EXPLAIN [ ( option [, ...] ) ] ...
- 基于JDBC从数据库中读取数据,在百度地图批量标注地点
基于JDBC从数据库中读取数据,在百度地图批量标注地点 一.相关技术 JSP,JDBC,JSON,JS,百度地图API 二.基于JDBC从数据库读取数据 见"JSP基于JDBC操作MSSQL ...
- php从数据库中读取特定的行
有的时候我们需要从数据库中读取特定的数据,来检验用户的输入,这个时候需要执行的sql语句是: select * from table_name where id='num'; 需要执行这样的一个语句. ...
- js 中读取JSON的方
js 中读取JSON的方法探讨 2009-03-01 16:08 js读取JSON的方法我接触到的有两种: 方法一:函数构造定义法返回 var strJSON = "{name:'json ...
- 【存储过程】从数据库中读取数据保存到文件中
2019独角兽企业重金招聘Python工程师标准>>> 由于初期规划不好,项目管理的action都存入到数据库中了,而实际上应该以配置文件的形式保存的,所以现在想改过来.一条条复制是 ...
- dw读取access中的图片_怎样从Access数据库中读取图片?解决办法
当前位置:我的异常网» C# » 怎样从Access数据库中读取图片?解决办法 怎样从Access数据库中读取图片?解决办法 www.myexceptions.net 网友分享于:2013-03-0 ...
- C# 文件保存到数据库中或者从数据库中读取文件
首先,介绍一下保存文件到数据库中. 将文件保存到数据库中,实际上是将文件转换成二进制流后,将二进制流保存到数据库相应的字段中.在SQL Server中该字段的数据类型是Image,在Access中该字 ...
- asp.net mvc 从数据库中读取图片的实现代码
首先是创建一个类,继承于ActionResult,记住要引用System.Web.Mvc命名空间,如下: public class ImageResult : ActionResult { publi ...
- 用jsp_servlet实现在mysql中存储图片_从数据库中读取并生成图片的Servlet
从数据库中读取并生成图片的Servlet 作者:未知 文章来源:www.jspcn.net 发布日期:2005年01月19日 作者:邵望 日期:2000-12-24 21:44:55 大体思路 ...
- 我刚做的一个TreeView的CheckBox进行选中插入数据库,从数据库中读取数据后让CheckBox勾选的代码!...
#region 绑定角色 /// <summary> /// 绑定权限信息 /// </summary> protected void Bind ...
最新文章
- Django-model中的Querysets
- 前端差异化项目合并打包
- MySQL字符串截取函数
- 2018 年度总结 —— 缘见
- js var是什么类型_JS变量的执行环境和生命周期
- python 线程退出_python线程退出
- python绘制双正切激活函数
- 假设计算机学院二年级,二年级计算机信息教案.doc
- 第八届“图灵杯”NEUQ-ACM程序设计竞赛个人赛——I题 买花
- 如何使用JSTL及JSTL标签库
- XidianOJ 1096 数的拆分
- java 无限循环语句_java学习之循环语句
- 2014 年移动设备界面设计有哪些趋势?
- 基于Android的BMI指数运算
- 【FinE】远期、期货、互换定价
- 一张图了解致远A6人事管理
- 微信小程序 day4
- 配置文件工具类【ConfigTools】
- 多个excel工作簿、工作表合并
- AI 人工智能 探索 (九)
热门文章
- Ubuntu 16.04 利用Sakurafrp工具管理多节点多隧道ID 实现 ssh 内网穿透
- 关于路由器老毛子Padavan固件作为主副路由桥接的问题
- 回归方程的拟合优度检验_线性回归模型的拟合优度检验方法分析.ppt
- Windows下搭建FTP服务,FileZilla Server
- MessageDigest 类的用法
- 力克“中国智造”之道,亮相第七届工业数字化论坛
- Linux如何刷新DNS缓存
- 市县城镇开发边界内1:500地形图无人机航测实践(M300 RTK+P1+大疆智图+航天远景采集软件)
- 计算机四级网络工程师知识点(非常全面!)
- 小度wifi的使用说明