在我的例子中,使用JSON格式的书签,能够清理它们并只保留有用的(一列命名的)属性(这些属性出现在结构的所有级别)是很好的。作为输出,必须保留整个JSON层次结构。
可以使用“JQ”工具吗?
到目前为止,我只能命名要删除的属性:
jq -c 'del(..| .index?,.guid?,.id?,.dateAdded?,.lastModified?,.typeCode?,.iconUri?)' in.json >out.json
需要指定要保留的属性,而不是:例如{children,type,root,title,uri}。
可以使用del()函数并以某种方式“否定”这个列表,或者在递归时使用select()吗?我尝试了一些组合,但都失败了。
请注意,“children”属性在本例中具有特殊的作用,因为它定义了JSON子树,但我希望有一种解决方案,可以将其视为其他属性。
(补充问题:是否可以将其与深度滤波结合,例如当深度> 3?)
输入JSON示例:
{
"guid": "toolbar_____",
"title": "toolbar",
"type": "text/x-moz-place-container",
"children": [
{
"guid": "Y-lVXPFXlF15",
"title": "",
"iconUri": "https://fr.wikipedia.org/static/apple-touch/wikipedia.png",
"type": "text/x-moz-place",
"uri": "https://fr.wikipedia.org/"
},
{
"guid": "S7ow_jYLOBlX",
"title": "tmp",
"type": "text/x-moz-place-container",
"children": [
{
"guid": "IFQ7EJXc-eNH",
"title": "Logiciel Attentes",
"type": "text/x-moz-place-container",
"children": [
{
"guid": "l-CtLEfkIatC",
"title": "LMMS v122",
"iconUri": "https://lmms.io/img/logo_sm.png",
"type": "text/x-moz-place",
"uri": "https://lmms.io/download#collapse_linpre"
},
{
"guid": "a5HfcSy3k_sT",
"title": "Slax UEFI apres v9.11",
"type": "text/x-moz-place",
"uri": "https://www.slax.org/"
}
]
},
{
"guid": "FUt5BsHdDl2Y",
"title": "Firewalls – MX Linux",
"type": "text/x-moz-place",
"uri": "https://mxlinux.org/wiki/networking/firewalls/"
}
]
}
]
}
预期输出:
{
"title": "toolbar",
"type": "text/x-moz-place-container",
"children": [
{
"title": "",
"type": "text/x-moz-place",
"uri": "https://fr.wikipedia.org/"
},
{
"title": "tmp",
"type": "text/x-moz-place-container",
"children": [
{
"title": "Logiciel Attentes",
"type": "text/x-moz-place-container",
"children": [
{
"title": "LMMS v122",
"type": "text/x-moz-place",
"uri": "https://lmms.io/download#collapse_linpre"
},
{
"title": "Slax UEFI apres v9.11",
"type": "text/x-moz-place",
"uri": "https://www.slax.org/"
}
]
},
{
"title": "Firewalls – MX Linux",
"type": "text/x-moz-place",
"uri": "https://mxlinux.org/wiki/networking/firewalls/"
}
]
}
]
}
1条答案
按热度按时间8ehkhllq1#
您可以通过结构
walk
,并通过使用with_entries
更新所有objects
,以临时将它们转换为键值对数组,并筛选具有匹配键的条目(即select
它是否它的.key
是IN
一个给定的肯定列表)。Demo
附加问题:是否可以将其与深度滤波相结合,例如当深度>3
您可以仅将上述应用于您所需深度的那些: