
私はbashシェルを使用しています。 JSON文字列のキー値を抽出できるものをシェルスクリプトに含めたいのですが...
davea$ json='{"id": "abc", "name": "dave"}'
「grep」を試しましたが失敗しました。
davea$ grep -Po '"id":.*?[^\\]",' $json
usage: grep [-abcDEFGHhIiJLlmnOoqRSsUVvwxZ] [-A num] [-B num] [-C[num]]
[-e pattern] [-f file] [--binary-files=value] [--color=when]
[--context[=num]] [--directories=action] [--label] [--line-buffered]
[--null] [pattern] [file ...]
それからPythonに関連する解決策を見つけましたが、それも失敗しました...
localhost:tmp davea$ echo $json | python -c 'import json,sys;obj=json.load(sys.stdin);print obj["id"]'
File "<string>", line 1
import json,sys;obj=json.load(sys.stdin);print obj["id"]
システムに追加のエントリをインストールせずに「id」キー値をどのように抽出できますか?
答え1
Pythonコードは正常に実行されます。使用する場合は、print
パラメータを囲む必要がありますpython3
。
echo "$json" | python2 -c 'import json,sys;obj=json.load(sys.stdin);print obj["id"]'
echo "$json" | python3 -c 'import json,sys;obj=json.load(sys.stdin);print(obj["id"])'
または以下を使用してくださいjq
。
echo "$json" | jq -r .id
上記のすべての解決策の結果:
abc