通过特定的标签/键从整个JSON中删除任意值的简单方法是什么?我的JSON可能具有任意深度,因此按标签删除应该递归完成。
{
"root": [
{
"name": "blah 1",
"remove": [ 1, 2, 3 ],
"new list": [
{
"name": "blah 2",
"remove": null,
"new list": [
{
"name": "blah 3",
"remove": [
{
"name": "blah 4",
"new list": []
},
{
"name": "blah 5",
"new list": []
}
]
}
]
},
{
"name": "blah 6",
"new list": []
}
]
}
]
}
并且我想删除所有带有标签“删除”
的元素,以便最终结果如下所示:
{
"root": [
{
"name": "blah 1",
"new list": [
{
"name": "blah 2",
"new list": [
{
"name": "blah 3"
}
]
},
{
"name": "blah 6",
"new list": []
}
]
}
]
}
使用sed
/awk
会产生意想不到的结果(尤其是当有嵌套对象要删除时),因此它必须是一个支持JSON的实用工具,如jq或类似工具。
使用基于walk-path
的unix实用程序jtc
也有一种简单的方法来实现相同的目标:
jtc -pw'<remove>l:' sample.json
-它将递归删除所有出现的标签“remove”
。如果希望将更改直接应用到源文件(sample.json
),则添加选项-f
PS
这在jq中得到了期望的结果。
jq 'del(..|.remove?)'
我试图递归删除JSON对象和所有子对象中的空值。如果子对象的关键点都已删除,则我希望该子对象也被删除。 比如。 应该变成这样: 下面是我编写的删除所有空值键的函数: 但这不会删除没有子项的父项: 因此,我得到的不是上面的结果,而是: 如您所见,它不会删除申请人的密钥。我如何在函数中检查它?或者它是否需要编写在我调用delKeys()后调用的单独函数中? 还有,有人看到这达到了最大递归深度吗?我尝试
我使用的是,我希望删除所有出现的特定元素。 它只删除了第一次出现的情况。但是我希望在我希望list仅用值“second”省略。我通过谷歌搜索发现,可以通过创建新列表并调用来实现。但是,是否有可能在不创建新列表的情况下删除所有事件,或者是否有任何可用的API来实现它?
这是带有Resharper终极试用版的Visual Studio 2015
我读了很多帖子提到删除匹配模式的键。我想删除与特定模式不匹配的键。
我知道这可能是一个重复,但仍然张贴我的问题,因为我找不到确切的答案我在寻找什么。我有一个json对象(或字符串)如下。 我将从RESTAPI测试中得到相同类型的响应,但是在每次调用之后,“timestamp”键将具有一个动态日期和时间值,该值与调用的时间有关。在这里,我使用JSONAssert将我的expect json与实际json作为一个整体进行比较。因为时间戳值不同,所以对我来说总是失败。
问题内容: 我已经在这个问题中尝试过方法,但是由于我在集群模式下工作,因此它不起作用,redis告诉我: (错误)CROSSSLOT请求中的键未哈希到同一插槽 问题答案: 该问题的答案尝试在一个中删除多个键。但是,与给定模式匹配的键可能不会位于同一插槽中,并且如果这些键不属于同一插槽,则Redis Cluster不支持多键命令。这就是为什么您收到错误消息。 为了解决此问题,您需要一对一地使用以下密