0

我需要从 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 字符串的“解析”会让我遇到稍微复杂一点的问题——但对于这些字符串,它应该可以正常工作——我想)

4

2 回答 2

2

要分配给数组,您必须使用括号。顺便说一句,您捕获输出的行tail也是无效的。

json=( $(tail -n1 output) )
echo "${json[2]}"
于 2013-02-04T10:39:39.400 回答
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"
于 2013-02-04T10:38:21.643 回答