我现在正在玩JQ, a JSON command line tool。我找不到可以帮助我处理相对简单问题的资源。
用例是我的JSON文件有我不需要的各种额外的东西(超过500mb),如果我可以杀死特定密钥的数据,它会将它减少到近1mb。
假装我有以下JSON:
{
"pages": {
"elems": { ... stuff ... }
},
"actions": {
"pages": { ... stuff ... }
}
}
我会运行什么样的命令来删除第一级pages
整个对象和键,但保留较低级别pages
?
预期产出:
{
"actions": {
"pages": { ... stuff ... }
}
}
我试过了:jq -c 'del(.pages)' myfile.json >outputfile.json
但它似乎也会破坏所有名为pages
的子键,从而导致类似:
{
"actions": {}
}
任何帮助都将不胜感激。
答案 0 :(得分:4)
我相信你原来的尝试应该按预期工作。这是我尝试时得到的结果:
$ jq -M 'del(.pages)' myfile.json
{
"actions": {
"pages": {
"stuff": "..."
}
}
}
要删除所有页面,您需要类似
的内容$ jq -M 'del(.. | .pages?)' myfile.json
{
"actions": {}
}
答案 1 :(得分:0)
由于您的输入文件非常大,因此使用jq 1.5的流解析器可能是值得的:
jq -n --stream '
fromstream(inputs|select((length == 2 and .[0][0] == "pages")|not))
' input.json