原作者:戴秋龙
- 解析json格式数据
- 问题概述
- 方案1通过jsonb解析json数据
- 方案2通过jq插件解析json数据
解析json格式数据
接到数据是用json 格式数据存储,存储格式如下:

具体数据格式:
解释 { "containerID": "10000000-10949514",
"containerName": "XXXX线",
"containerType": "200000",
"data": {
"t_ast_ts_pole": [
{
"maint_group_name": "XXXX",
"obj_id": "f4db51ed-5XXXXXa7360a",
"psr_type": 201002,
"psr_id": "f4db51edCCCe981a7360a",
"psr_state": "02",
"city": "1096FA0035D17535E05379FB32000001",
"line": "10000000-10949514",
"maint_org": "1096FA0035D17535E05379FB50152125",
"voltage_level": "0136",
"start_pole": "10200000-19185423",
"maint_group": "1096FAXXXX50166089",
"province_name": "XXX",
"superior_line": "10110000-1002014762",
"start_time": 827942400000,
"last_update_time": 1629723262000,
"city_name": " XXXXXXXX公司",
"stop_pole": "10200000-19183500",
"wire": "10110000-1002014762",
"province": "10262690",
"maint_org_name": "XXXX公司本部",
"name": "XXXXX"
},
{
"maint_group_name": "XXXX",
"obj_id": "XXX6-f5e296b7c97b",
"psr_type": 201002,
"psr_id": "aa210XXXXXXb",
"psr_state": "02",
"city": "1096FA0035D17535E05379FB32000001",
"line": "10000000-10949514",
"maint_org": "1096FA0035D17535E05379FB50152125",
"voltage_level": "0136",
"start_pole": "10200000-19174680",
"maint_group": "1096FA0035D17535E05379FB50166089",
"province_name": "国XXXXX司",
"superior_line": "10110000-1002014762",
"start_time": 827942400000,
"last_update_time": 1629723262000,
"city_name": "XXXXX公司",
"stop_pole": "10200000-19185423",
"wire": "10110000-1002014762",
"province": "10262690",
"maint_org_name": "XXXX本部",
"name": "#028XXXX杆"
}
.....
问题概述
需要通过给定的格式解析成结构化数据。
方案1通过jsonb解析json数据
解释 with taba as (
select json 格式数据 ::jsonb->'data'->'t_ast_ts_pole' a
)select jsonb_array_elements(a::jsonb) -> 'obj_id' obj_id ,
jsonb_array_elements(a::jsonb) -> 'city' city
from taba
obj_id city
"f4db51ed-5cdc-4fc7-a507-95e981a7360a" "1096FA0035D17535E05379FB32000001"
"aa210d28-9d36-4467-abc6-f5e296b7c97b" "1096FA0035D17535E05379FB32000001"
"9c370ad2-2f15-44d3-91a9-a6b317a9048a" "1096FA0035D17535E05379FB32000001"
"10100000-2008407858" "1096FA0035D17535E05379FB32000001"
"10100000-2008414351" "1096FA0035D17535E05379FB32000001"
"10100000-2008417875" "1096FA0035D17535E05379FB32000001"
"10100000-2010118356" "1096FA0035D17535E05379FB32000001"
"10100000-2008411631" "1096FA0035D17535E05379FB32000001"
"10100000-2008417215" "1096FA0035D17535E05379FB32000001"
"10100000-2008409471" "1096FA0035D17535E05379FB32000001"
"10100000-2010118376" "1096FA0035D17535E05379FB32000001"
带引号的数据另做处理把, 毕竟数据已经入库。后续处理简单的多
方案2通过jq插件解析json数据
下载:https://stedolan.github.io/jq/download/
文本下载1.5版本:
安装:
tar -zvxf jq-1.5.tar.gz
cd jq-1.5/
./configure
make && make install
验证:
代码:
解释 cat data.json | jq '.data' | jq '.t_ast_ts_pole'| jq -r '.[ ]|"\(.equip_code),\(.province),\(.ast_type),\(.rated_voltage_level),\(.model)"'
11M00001614513837,10262690,103000,null,SZT2(4)
11M00001622842273,10262690,103000,null,SZC4(6)
11M00001622842481,10262690,103000,null,ZMCK-54
11M00001800026860,10262690,103000,null,ZM1
11M00001800026863,10262690,103000,null,ZM3
11M00001800027298,10262690,103000,null,ZM1
......
说明:
解释cat data.json | jq '.data' : 解析根目录中的data标签
cat data.json | jq '.data' | jq '.t_ast_ts_pole' : 解析根目录中的data. t_ast_ts_pole'标签
jq -r '.[ ]|"\(.equip_code),\(.province),\(.ast_type),\(.model) "'
jq -r:循环取数据,后面指定各类标签,即可取出对应数据
| 方案 | 简述 | 处理 |
|---|---|---|
| jsonb | 结合SQL语句使用需要处理特殊字符,如引号 | 处理引号 |
| jq | 无需处理特殊字符 | 需要copy形式入库 |
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




