替换对象中找到的字符串中的某些字符

问题描述 投票:0回答:2

我有一个对象列表,并且希望当键为

.
时使用
:
 将所有出现的 
Name
 替换为 
jq

输入:

{
  "Parameters": [
    {
      "Name": "TEST.AB.SOMETHING",
      "Value": "hvfuycsgvfiwbiwbibibewfiwbcfwifcbwibcibc"
    },
    {
      "Name": "TEST_GF_USER",
      "Value": "ssssecret"
    }
  ]
}

预期输出:

{
  "Parameters": [
    {
      "Name": "TEST:AB:SOMETHING",
      "Value": "hvfuycsgvfiwbiwbibibewfiwbcfwifcbwibcibc"
    },
    {
      "Name": "TEST_GF_USER",
      "Value": "ssssecret"
    }
  ]
}
json jq
2个回答
8
投票

您可以按

.
分开并按
:

加入
jq '(.Parameters[].Name)|=(split(".")|join(":"))' file.json

使用 update 运算符完成分配。


7
投票

诀窍是使用

.Name |= gsub("\\.";":")
。就您而言(平面列表),这很简单。如果你想修改任意 JSON 文本中所有对象的键,最简单的方法是使用
walk/1
:

walk( if type == "object" and (.Name|type) == "string" then .Name |= gsub("\\.";":")) else . end )

(如果你的 jq 没有 walk/1,那么它的 jq 定义很容易通过谷歌搜索找到。)

© www.soinside.com 2019 - 2024. All rights reserved.