将JSON的多个值读入Bash变量,不能使用jq这样的第三方工具

2024-09-27 00:18:22 发布

您现在位置:Python中文网/ 问答频道 /正文

这已经被问了一百万次了,我知道有一百万个soln。不过,我的限制是我不能在这个客户机服务器上安装任何东西,所以我有bash可以想出的任何东西:)

我引用Parsing JSON with Unix tools并使用它来读取数据并拆分成行。在

$ cat demo.json
{"rows":[{"name":"server1.domain.com","Access":"Owner","version":"99","Business":"Owner1","Owner2":"Main_Apprve","Owner1":"","Owner2":"","BUS":"Marketing","type":"data","Egroup":["ALPHA","BETA","GAMA","DELTA"],"Ename":["D","U","G","T","V"],"stage":"TEST"}]}

但是,正如您所看到的,它将“Egroup”和其他具有多个条目的项目分割成一行,这使它变得有点困难。在

^{pr2}$

我正在尝试捕获数据,以便我可以使用shell脚本列出。您建议我如何捕获每个变量,然后在shell脚本中的报告中重用?在

 grep -Po '"Egroup":.*?[^\\]",' demo.json
"Egroup":["ALPHA",

正如您所看到的,这对于具有多个条目的行不起作用。在

感激不尽。(顺便说一句,Im对python和perl选项开放,但不必安装任何额外的模块来与json一起使用)


Tags: 目的alpha脚本bashjson客户机demoshell
3条回答

使用Python很简单。

示例

$ python -c 'import sys, json; print json.load(sys.stdin)["rows"][0]["Egroup"]' <demo.json 
[u'ALPHA', u'BETA', u'GAMA', u'DELTA']

使用JSON模块的Perl 1-liner:

perl -lane 'use JSON; my $data = decode_json($_); print join( ",", @{ $data->{rows}->[0]->{Egroup} } )' demo.json

输出

^{pr2}$

如果您没有安装JSON,那么您可以复制JSON::PPPP表示纯Perl)的源代码并将其放入您的工作目录中:

/working/demo.json
/working/JSON/PP.pm   # <- put it here

perl -lane -I/working 'use JSON::PP; my $data = decode_json($_); print join( ",", @{ $data->{rows}->[0]->{Egroup} } )' demo.json   

我认为添加jq解决方案很好,因为它是一个很棒的JSON工具:

<input jq  raw-output '.rows[].Egroup|join(",")'

你可以在这里看到它的作用https://jqplay.org/s/de4X1TUBG4

相关问题 更多 >

    热门问题