我需要从bash中的json字符串中提取一些信息。 json字符串就像
{"ok":true,"id":"af1aa5cef5dc0c86fd734ff3d42a8188","rev":"1-f28941b049d7d356ae113fa061ddfe1f"}
(来自couchdb插入的输出)
我想抓住id,所以我试着
$IFS=;,\"
json=tail -n1 output
echo $json
\\ { ok true id af1aa5cef5dc0c86fd734ff3d42a8188 rev 1-f28941b049d7d356ae113fa061ddfe1f }
所以,到目前为止,一切看起来都很好,但是,如果我尝试访问一个元素,$ {json [0]}将返回整个字符串,而所有其他$ {json [n]}都是空的。
另一方面,
for i in $json;
do echo $i
done
使用$ json ...
的每个元素我一定是做错了什么,但是什么?
(是的,我知道这种json字符串的“解析”会让我遇到一些稍微复杂的问题 - 但对于这些字符串它应该可以正常工作 - 我想)
答案 0 :(得分:2)
要分配给数组,必须使用括号。捕获tail
输出的行也无效,BTW。
json=( $(tail -n1 output) )
echo "${json[2]}"
答案 1 :(得分:1)
您可以使用awk:
$ echo '"ok":true,"id":"af1aa5cef5dc0c86fd734ff3d42a8188","rev":"1-f28941b049d7d356ae113fa061ddfe1f"}' | awk -F, '{ print $2 }'
"id":"af1aa5cef5dc0c86fd734ff3d42a8188"
您还可以使用awk
$ awk -F'[,:]' '{ print $4 }' your_json_file.json
"af1aa5cef5dc0c86fd734ff3d42a8188"