首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >(Linux)具体使用Grep提取JSON值(没有json解析器)

(Linux)具体使用Grep提取JSON值(没有json解析器)
EN

Stack Overflow用户
提问于 2022-07-26 12:22:36
回答 2查看 66关注 0票数 0

我希望在Linux中使用Grep从JSON响应中提取oid值,并将其存储在变量$oid中。JSON存储在变量$Response中

我的代码

代码语言:javascript
运行
复制
oid= $Response | grep -Po '"oid": *\K"[^"]\*"'

My JSON (简写)

代码语言:javascript
运行
复制
{
"count": 1,
"items": [{
        "oid": "xyzxyzxyzxyzxyzxyzxyz",
        "creationDate": "2019-02-05T02:21:08.662+0000"
         }]
}

实际行为:当我回送$oid时,它是空的(例如,Grep没有从JSON中提取任何值)

预期行为:$oid保存从JSON中提取的样例(在本例中是

EN

回答 2

Stack Overflow用户

发布于 2022-07-26 13:29:29

由于OP清楚地提到了json解析器不能被使用,所以在GNU grep中不能这样回答。用GNU grep编写和测试,仅显示示例。而且,专家们总是建议使用json解析器,所以如果您有兴趣的话。

代码语言:javascript
运行
复制
echo "$Response" | grep -ozP '(^|\n){\n"count":\s+[0-9]+,\n"items":\s+\[{\n\s+"oid":\s+"\K[^"]*'

输出如下:xyzxyzxyzxyzxyzxyzxyz

regex的解释:添加了对上述regex使用的详细说明,它仅用于解释目的,如需使用,请参阅上面的GNU grep命令。

代码语言:javascript
运行
复制
(^|\n){\n    ##Matching new line OR starting here followed by { and new line.
"count":\s+  ##Matching "count": followed by 1 or more spaces.
[0-9]+,\n    ##Matching 1 or more digits followed by comma followed by new line.
"items":\s+  ##Matching "items": followed by 1 or more spaces.
\[{\n\s+     ##matching literal [ followed by { new line and spaces.
"oid":\s+"   ##Matching "oid": followed by 1 or more spaces followed by " here.
\K           ##Here is GNU grep's GREAT option \K which helps us to forget previous match.
             ##Basically match everything but forget its value so that we can get only required values.
[^"]*        ##Match everything just before next occurrence of " here.
票数 1
EN

Stack Overflow用户

发布于 2022-07-26 18:58:48

试试这个:

代码语言:javascript
运行
复制
Response='
{
"count": 1,
"items": [{
        "oid": "xyzxyzxyzxyzxyzxyzxyz",
        "creationDate": "2019-02-05T02:21:08.662+0000"
         }]
}
'

oid="$(grep -Po '"oid": *"\K[^"]+' <<< "$Response")"

echo "$oid"

# output : xyzxyzxyzxyzxyzxyzxyz
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73123322

复制
相关文章

相似问题

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