web-dev-qa-db-ja.com

jqを使用してJSON文字列を解析する

私はjqを取得して、次のようなJSON構造を解析しようとしています:

{
  "a" : 1,
  "b" : 2,
  "c" : "{\"id\":\"9ee ...\",\"parent\":\"abc...\"}\n"
}

つまり、JSONの要素はエスケープされたjsonを含む文字列です。

だから、$ jq [.c] myFile.json | jq [.id]の線に沿って何かがあります

しかし、それはjq: error: Cannot index string with stringでクラッシュします

これは、.cの出力がJSONではなく文字列であるためです。 jqにこの文字列を解析させるにはどうすればよいですか?

私の最初の解決策は、sedを使用してすべてのエスケープ文字(\":\"\",\"、および\")を置き換えることですが、それは面倒です、jqにはこの?

ありがとう!

編集:また、ここで入手できるjqバージョンは次のとおりです。

$ jq --version
jq version 1.3

必要に応じて更新できると思います。

53
Colin Grogan

jqには fromjson が組み込まれています:

jq '.c | fromjson | .id' myFile.json

fromjsonはバージョン1.4で追加されました。

100
jwodder

文字をエスケープしない生の出力(-r)を使用できます。

jq -r .c myfile.json | jq .id

補遺:これには、jq 1.3以降で動作するという利点があります。実際、-rオプションがあるjqのすべてのバージョンで動作するはずです。

30