2017-03-21 29 views
0

こんにちは私は次のjsonを持っています。文字列エンコードされたjsonをjqで平坦化する方法は?

[ 
    { 
     "myfield1": "foo", 
     "myfield2": "{\"field1\":6366987, \"field2\":5501072}" 
    }, 
    { 
     "myfield1": "bar", 
     "myfield2": "{\"field1\":123456, \"field2\":123456}" 
    } 
] 

そして、取得したいと思います...これまでのところ、私はこれを得た

[ 
    { 
     "myfield1": "foo", 
     "field1": 6366987, 
     "field2": 5501072 
    }, 
    { 
     "myfield1": "foo", 
     "field1": 123456, 
     "field2": 123456 
    }, 
] 

...

JQ「[。[0] | {myfield1:.myfield1、myfield2:.myfield2 | fromjson}] '

しかし、これは、各jsonフィールドを指定する必要があり、jsonエンコードされた文字列を平坦化しないことを意味します。

編集:

私はこれでそれを得たと思う...

JQ「[[0] | with_entries((.KEY = "myfield2" を選択)!)+(myfield2 |。 fromjson)] '

意味がありますか?

答えて

1

あなたは解決策がfromjsonを含むこと正しいですが、以下のように、単純に、より直接的、そしてより効率的なアプローチは次のようになります。

map({ myfield1 } + (.myfield2 | fromjson)) 

あなたが「myfield2」を除くすべてのフィールドを保持したい場合は、次の点を考慮してください:

map(del(.myfield2) + (.myfield2 | fromjson)) 
+0

クール、私はより一般的なバージョンが欲しかったです。さらに多くのフィールドがあり、myfield1だけです。申し訳ありませんが質問に指定されていない場合。 – user432024

+0

マップ(delpaths([["myfield2"]])+(.myfield2 | fromjson)) 'の作品 – user432024

関連する問題