json - 更改与条件匹配的 JSON 列表中的条目,而不丢弃文档的其余部分
问题描述
我正在尝试打开一个文件,查看文件并根据该值更改一个值并将其传递给文件或 var。下面是 JSON 的示例
{
"Par": [
{
"Key": "12345L",
"Value": "https://100.100.100.100:100",
"UseLastValue": true
},
{
"Key": "12345S",
"Value": "VAL2CHANGE",
"UseLastValue": true
},
{
"Key": "12345T",
"Value": "HAPPY-HELLO",
"UseLastValue": true
}
],
"CANCOPY": false,
"LOGFILE": ["HELPLOG"]
}
我一直在使用 jq 并且我已经成功地隔离了对象组并更改了值。
cat jsonfile,json | jq '.Par | map(select(.Value=="VAL2CHANGE")) | .[] | .Value="VALHASBEENCHANGED"'
这给
{
"Key": "12345S",
"Value": "VALHASBEENCHANGED",
"UseLastValue": true
}
id 想要实现的是保留具有更改值的完整 JSON 输出
{
"Par": [
{
"Key": "12345L",
"Value": "https://100.100.100.100:100",
"UseLastValue": true
},
{
"Key": "12345S",
"Value": "VALHASBEENCHANGED",
"UseLastValue": true
},
{
"Key": "12345T",
"Value": "HAPPY-HELLO",
"UseLastValue": true
}
],
"CANCOPY": false,
"LOGFILE": ["HELPLOG"]
}
IE
jq '.Par | map(select(.Value=="VAL2CHANGE")) | .[] | .Value="VALHASBEENCHANGED"' (NOW PUT IT BACK IN FILE)
或者
打开文件,查看文件,要更改的文件值并更改此值并将其输出到文件或屏幕
要添加,json 文件将只包含我在创建它时寻找一次的值。如果任何其他值需要更改,我会以不同的方式命名。
解决方案
jq --arg match "VAL2CHANGE" \
--arg replace "VALHASBEENCHANGED" \
'.Par |= map(if .Value == $match then (.Value=$replace) else . end)' \
<in.json
要更全面地替换嵌套数据结构中的任何位置的字符串,您可以使用该walk
函数——它将在 jq 1.6 的标准库中,但可以在 1.5 中手动拉入:
jq --arg match "VAL2CHANGE" \
--arg replace "VALHASBEENCHANGED" '
# taken from jq 1.6; will not be needed here after that version is released.
# Apply f to composite entities recursively, and to atoms
def walk(f):
. as $in
| if type == "object" then
reduce keys_unsorted[] as $key
( {}; . + { ($key): ($in[$key] | walk(f)) } ) | f
elif type == "array" then map( walk(f) ) | f
else f
end;
walk(if . == $match then $replace else . end)' <in.json
推荐阅读
- javascript - 按钮 Onclick 函数在加载时执行
- laravel-5 - VueJS:尽管数组中有对象,但 v-for 指令不渲染项目
- javascript - 提交通过推送器显示的实时表单时出现 419
- reactjs - 使用 React 中的 Axios 发出 http 请求以表达在预飞行后因 CORS 错误而失败。在服务器上启用了 CORS,但仍然无法正常工作
- regex - 匹配直到符号第一次出现
- reactjs - getDerivedStateFromError 后重置状态
- ios - UITextField 没有在 UIStackView 中归档可用宽度
- python - 告诉 IPython 交互小部件忽略 OOP 中的 self 参数
- python - 从 Python 中的文本文件返回特定/唯一数字的计数?
- python - Python:在放置请求中合并文件路径