首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >解析来自不同JSON字符串的值(No jq)

解析来自不同JSON字符串的值(No jq)
EN

Unix & Linux用户
提问于 2019-11-08 15:46:37
回答 4查看 2.7K关注 0票数 1

我使用bash脚本,它需要读取JSON输出并解析来自不同JSON变量或字符串的值。这是样本输出。它需要读取Content旁边的值或任何其他变量的值。比如,

查找Content并能够打印Value1

查找DeviceType并能够打印Value4

样本输出:{"Content":"Value1","CreationMethod":"Value2","database":"Value3","DeviceType":"Value4"}

我尝试了sed和awk sed 's/["]/ /g' | awk '{print $4}'的组合,但前提是Content在输出中的位置保持不变。否则,在不同的JSON输出中,Content的位置会发生变化,从而使值超出范围,从而使awk '{print $4}'获取错误的值。

EN

回答 4

Unix & Linux用户

发布于 2019-11-08 16:41:11

好吧,如果我对你的理解是正确的,用GNU greptr

代码语言:javascript
复制
tr ',' '\n' < foo | grep -Po "(?<=Content\":\").*(?=\")"

输出:

代码语言:javascript
复制
Value1

使用其他关键字:

代码语言:javascript
复制
tr ',' '\n' < foo | grep -Po "(?<=database\":\").*(?=\")"

Value 3

用逗号替换新行:

代码语言:javascript
复制
tr ',' '\n'

Grep -o-P perl类regex

代码语言:javascript
复制
grep -Po

捕获模式(":"")(")并只打印。

票数 1
EN

Unix & Linux用户

发布于 2019-11-08 22:22:16

使用OP的预期jq/awk减少sed/D3

代码语言:javascript
复制
s="Content"; sed 's/[{}"]//g' file | awk -v s=$s -F ":" -v RS=',' '($1 == s) {print $2}'
票数 1
EN

Unix & Linux用户

发布于 2019-11-09 12:49:13

好吧,我承认这很糟糕.

代码语言:javascript
复制
$ awk 'BEGIN {FPAT="\"[^\"]+\""; RS=","; pat=ARGV[1]; delete ARGV[1]} 
     $1 ~ pat {print $2} '       Content ex.json
"Value1"
票数 1
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/551159

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档