gpt4 book ai didi

json - 使用 jq 在我的 JSON 中搜索和替换时遇到问题

转载 作者:行者123 更新时间:2023-12-04 17:47:23 27 4
gpt4 key购买 nike

我一直在努力让这个工作好几天,但我被卡住了。

我有一个 json 数据结构,其中包含我想要更新的值,基本上使用我的 json 作为数据库来存储配置值。这是我的 JSON:

{
"Actions": [
{
"Number": 1012,
"RollbackPoint": "xxx_1012_RollbackPoint_xxx",
"Parameters": [
{
"Name": "accountType",
"Value": "xxx_1012_accountType_xxx"
},
{
"Name": "userPassword",
"Value": "xxx_1012_userPassword_xxx"
}
]
},
{
"Number": 1015,
"RollbackPoint": "xxx_1015_RollbackPoint_xxx",
"Parameters": [
{
"Name": "accountType",
"Value": "xxx_1015_accountType_xxx"
},
{
"Name": "skipExport",
"Value": "xxx_1015_skipExport_xxx"
}
]
}
]
}

我要执行两次更新
  • 将 RollbackPoint 更新为“1012”,其中 Number = 1015
  • 将参数下的值更新为“AWS”,其中 name =“accountType”,其中 Number = 1012

  • 到目前为止,我最接近的是使用这个:
    cat json.txt | jq  '.[] | map(. + {RollbackPoint:(if (."Number") == 1015 then "1015" else .RollbackPoint end)})'

    但这剥离了 Actions[] 元素,所以它对我没有好处,我什至不知道从哪里开始更新 2 ......

    任何帮助将不胜感激,在谷歌上超过 5 个小时,我仍然遥不可及。

    非常感谢
    马特

    最佳答案

    您可以使用 //运算符来模拟(恕我直言)更好的 if-else 树以及各种过滤器。与大型 if-else 树相比,它更易于遵循。

    .Actions |= map(
    (select(.Number == 1015) |
    .RollbackPoint = "1012"
    ) //
    (select(.Number == 1012) |
    .Parameters |= map((select(.Name == "accountType") | .Value = "AWS") // .)
    ) //
    .
    )

    关于json - 使用 jq 在我的 JSON 中搜索和替换时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29592224/

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