这已被问了一百万次,我知道有一百万次溶解。但是我受到限制,我无法在这个客户端服务器上安装任何东西,所以我有任何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"和其他多个条目分成单行,使其更难一点。
cat demo.json | sed -e 's/[{}]/''/g' | awk -v k="text" '{n=split($0,a,","); for (i=1; i<=n; i++) print a[i]}>
"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"]
我试图捕获数据,以便我可以使用shell脚本列出。您如何建议我捕获每个变量,然后在shell脚本中重复报告?
grep -Po '"Egroup":.*?[^\\]",' demo.json
"Egroup":["ALPHA",
正如您所看到的,对于包含多个条目的行,这不起作用。
赞赏的想法。 (顺便说一下我对python和perl选项开放,但无需安装任何额外的模块与json一起使用)
答案 0 :(得分:0)
使用Python
很简单。
示例强>
$ python -c 'import sys, json; print json.load(sys.stdin)["rows"][0]["Egroup"]' <demo.json
[u'ALPHA', u'BETA', u'GAMA', u'DELTA']
答案 1 :(得分:0)
使用JSON模块的Perl 1-liner:
perl -lane 'use JSON; my $data = decode_json($_); print join( ",", @{ $data->{rows}->[0]->{Egroup} } )' demo.json
<强>输出强>
ALPHA,BETA,GAMA,DELTA
如果您没有安装JSON,而不是尝试重新发明JSON解析器,则可以复制JSON::PP的源( PP表示Pure 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
答案 2 :(得分:0)
我认为添加jq解决方案很好,因为它是一个很棒的JSON工具:
<input jq --raw-output '.rows[].Egroup|join(",")'
看到它的运行情况