0

bash の json 文字列からいくつかの情報を抽出する必要があります。json-stringsは次のようになります

{"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

1

awkを使用できます:

$ echo '"ok":true,"id":"af1aa5cef5dc0c86fd734ff3d42a8188","rev":"1-f28941b049d7d356ae113fa061ddfe1f"}' | awk -F, '{ print $2 }'
"id":"af1aa5cef5dc0c86fd734ff3d42a8188"

で2つの区切り文字を使用することもできますawk

 $ awk -F'[,:]' '{ print $4 }' your_json_file.json
"af1aa5cef5dc0c86fd734ff3d42a8188"
于 2013-02-04T10:38:21.643 に答える