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

pun*_*eth 5 json jq

我有一个对象列表,并且希望在使用密钥时将所有出现的 替换.:Namejq

输入:

{
  "Parameters": [
    {
      "Name": "TEST.AB.SOMETHING",
      "Value": "hvfuycsgvfiwbiwbibibewfiwbcfwifcbwibcibc"
    },
    {
      "Name": "TEST_GF_USER",
      "Value": "ssssecret"
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

预期输出:

{
  "Parameters": [
    {
      "Name": "TEST:AB:SOMETHING",
      "Value": "hvfuycsgvfiwbiwbibibewfiwbcfwifcbwibcibc"
    },
    {
      "Name": "TEST_GF_USER",
      "Value": "ssssecret"
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

hek*_*mgl 8

您可以分割.并加入:

jq '(.Parameters[].Name)|=(split(".")|join(":"))' file.json
Run Code Online (Sandbox Code Playgroud)

分配是使用更新运算符完成的。


pea*_*eak 7

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

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

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