Ubuntuを使用していますが、2つのパターン間の値を抽出したいのに必要な文字列はファイルにありません。
私のデータは次のとおりです。
[{"rows":[{"_uuid":["uuid","11111-222-33333-4444444"]}]}]
,
私は間にテキストをインポートしたいと思います。]
これは私が欲しいことを意味します11111-222-33333-444444
。これを行うにはどうすればよいですかsed
?
ベストアンサー1
使用してくださいjq
(入力がコンパクトか複数行かは関係ありません)。
your-command | jq -r '.[0].rows[0]._uuid[1]'
JSONドキュメントはオブジェクトの配列であり、これらの最上位オブジェクトの最初のオブジェクトが必要です.[0]
。オブジェクトにはrows
配列が含まれており、最初の要素が必要です.rows[0]
。その要素の名前が付けられた別の配列があり、_uuid
その配列の2番目の要素が必要です._uuid[1]
。
-r
デコードされた「生」データが取得されます。それ以外の場合-r
(引用符で囲まれた)JSON文字列を受け取ります。
データをインポートする全く異なる方法特別なJSONドキュメントをインポートします。最後の値ファイルから:
your-command | jq -r 'getpath([paths(scalars)][-1])'
まず、ドキュメント全体ですべてのスカラー値を生成するすべての「パス」を使用し、paths
最後の値を選択します。次に、式は最後のスカラーのパスを使用してgetpath
最後の値を抽出します。これにより、その文書に対して予想される出力が生成されます。
次のコードは同じことができますが、..
withの明示的な再帰を使用してselect()
すべてのスカラー値を抽出します。
your-command | jq -r '[.. | select(scalars)][-1]'
個人的には、私はこの答えで最も重要な提案を選択します。なぜなら、この答えは何らかの方法でユーザーに理解できる文書の構造を使用するからです。関連する配列のいずれかがより多くの要素を含め始めると、コードを再確認して問題を再現する必要があります。