python -mjson.toolコマンドでフィルタ基準を使用して特定のプロパティを持つオブジェクトを選択できますか?
たとえば、2つのオブジェクトを含むexample.jsonファイルがあり、そのうちの2つには「test」:「pi」属性があります。これら2つのオブジェクトを取得するだけです。
答え1
情報を正しく抽出するには、入れ子になったデータ構造(JSONなど)を関連ツール(例:json対応)に解析する必要があります。行認識ルーチン(grep/sed/awk/etcなど)のみを使用してネストされたデータ構造を操作しようとすると、失敗と偽の肯定が発生します。たとえば、上記の答えは、JSONがきれいに印刷され、各JSON要素が1行に1つずつある場合にのみ機能します。 JSONが異なる方法で印刷されると(つまり、1行に、または同じ行に複数の要素がある場合)、失敗します。
したがって、Pythonを使用している場合は、オブジェクトを解析してからプログラムで必要なデータを抽出する必要があります(たとえば、Pythonでスクリプトを作成するなど)。
しかし、別の方法があります。 Unixでは、jq、jtc(およびその他の多く)など、ユーザーなどの要件を簡単に実装できる開発されたユーティリティまたはjson認識ユーティリティがあります。以下で解決方法を紹介します。JTC:
次のJSONがあるとします。
bash $ cat file.json
{
"Root": [
{
"data": "2.71",
"test": "e"
},
{
"data": "3.14",
"test": "pi"
}
]
}
bash $
次に、含まれているすべてのオブジェクトを抽出するには、次のように"test": "pi"
使用します。jtc
bash $ cat file.json | jtc -w'[test]:<pi>: [-1]'
{
"data": "3.14",
"test": "pi"
}
bash $
walk-path( ) パラメータ-w
の説明:
1.[test]:<pi>:
同様の要素がすべて検索されます"test": "pi"
(複数の場合)。
2.[-1]
見つかった要素から JSON レベル 1 つ上に上がります。
散歩結果を印刷します。
ここでjtc
完全なユーザーガイドをご覧ください。https://github.com/ldn-softdev/jtc/blob/master/User%20Guide.md
答え2
私は答えが「いいえ」と信じています。私はPythonの専門家ではありませんが、コードを見ました。このツールのオプションは表示されません。
最近同じ問題があったので、私はパイプを打ちました。grep私が探しているもの。 grep を使用すると、一致する行の前後の行を表示できるため、節全体を表示できます。
... | pythom -m json.tool | grep -E -B 3 -A 5 'test.*:.*pi'
これにより、「test」[something]:[something] piを含む行の前3行、後5行が表示されます。