bashシェルを使用してJSONキー値を抽出するには?

bashシェルを使用してJSONキー値を抽出するには?

私は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

おすすめ記事