2017-10-30 9 views
0

私はちょうどJQ, a JSON command line toolで遊んでいます。私は比較的簡単な問題で私を助けることができるリソースを見つけることができませんでした。jqで親オブジェクトからキーを削除

ユースケースは私が必要としないあらゆる種類の余分なもの(500mb以上)を持っています。特定のキーのデータを削除することができれば、ほぼ1MBに減らすことができます。

{ 
    "pages": { 
    "elems": { ... stuff ... } 
    }, 
    "actions": { 
    "pages": { ... stuff ... } 
    } 
} 

私は1レベルpagesオブジェクト全体とキーを削除しますが、低いレベルを維持するために実行するコマンドのどのようpagesそのまま:

は、私は、次のJSONを持っているふり?

予想される出力:jq -c 'del(.pages)' myfile.json >outputfile.json しかし、キーのようなもので、その結果、同様pagesと呼ばれる、すべての子どもたちを破壊するように見えた:

{ 
    "actions": { 
    "pages": { ... stuff ... } 
    } 
} 

私が実行してみました

{ 
    "actions": {} 
} 

任意の助けをいただければ幸いです。

+0

は、1.5でうまく動作します。再現できない – RomanPerekhrest

+0

もjq 1.3とjq 1.4(!)でうまく動作します – peak

答えて

0

私はあなたの元の試みが期待どおりに機能しているはずだと思います。ここで私はそれをしようとすると、私が得るものです:

$ jq -M 'del(.pages)' myfile.json 
{ 
    "actions": { 
    "pages": { 
     "stuff": "..." 
    } 
    } 
} 

Try it online at jqplay.org

どこでもあなたの入力ファイルがかなりあるので、あなたは

$ jq -M 'del(.. | .pages?)' myfile.json 
{ 
    "actions": {} 
} 

Try it online at jqplay.org

0

のようなものが必要になり、すべてのページを削除するには大規模な場合は、jq 1.5のストリーミング・パーサーを使用する価値があります。

jq -n --stream ' 
    fromstream(inputs|select((length == 2 and .[0][0] == "pages")|not)) 
' input.json 
関連する問題