gpt4 book ai didi

python - 在所有文件中找到 JSON 键并删除对应的键值对

转载 作者:行者123 更新时间:2023-12-03 20:25:50 25 4
gpt4 key购买 nike

我有很多文件需要在其中找到一个字符串,如果该字符串存在,那么我需要从所有这些文件中删除该字符串周围的 json 块。

例如:

我正在寻找这个字符串 - "1234"在我所有的文件中。每个文件都有一个巨大的 json 块,其中包含我想删除的字符串。所以在所有这些文件中,字符串如下两种格式:

第一种格式是:

...
"data": {
"1234": {
"tt": true
}
}
...

数据中包含多个 json 对象的第二种格式:
...
"data": {
"1234": {
"tt": true
},
"7890": {
"tt": true
}
}
...

现在我需要想出一些脚本,我可以从中删除 json 对象 "1234"完全地。所以输出应该是:

对于第一种格式:
...
"data": {}
...

对于第二种格式:
...
"data": {
"7890": {
"tt": true
}
}
...

这是可能的吗?我在 mac linux 终端。我可以进行 grep 搜索并找到文件,但不确定如何从所有文件中删除该字符串周围的 json 对象。

注:每个 json 文件的格式都很好。

更新:
{
"props": [
{
"property": "Hat",
"data": {
"1234": {
"tt": true
},
"7890": {
"tt": true
}
}
}
]
}

这是片段 - https://jqplay.org/s/qXW_QUYFv0 .如果 property值为 Hat那么只有我想删除存在的键,但如果属性值是别的东西,那么我不想删除那个键。有什么方法可以添加此更改吗?

最佳答案

Is "1234" always a key, or can it be a value too?


它永远是一把 key 。 – 龙 3 小时前

这是一个使用“walk/1”的简单直接的解决方案:
walk(if type == "object" then with_entries(select(.key != "1234")) else . end)
处理多个文件
多个文件的处理将取决于 (a) 如何指定文件; (b) 是否要覆盖这些文件,如果是,是有条件地还是无条件地覆盖,如果不是,则使用什么文件名。
简而言之,有多种变体。这是一个例子:
for f in *.json
do
jq -f -program.jq "$f" > "$f.new"
done
其中 program.jq 包含 walk程序如上所示。

关于python - 在所有文件中找到 JSON 键并删除对应的键值对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61371086/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com