jq在外面添加捕获组结果

时间:2018-03-29 10:25:33

标签: json regex object jq capturing-group

例如,

输入:

    {
       "id":"abc",
       "name": "name-middlenane-lastname-1"
    },

    {
        "id":"123",
        "name": "fname-flast-2"
    }

响应:

    {
         "id":"abc",
         "name": "name-middlename-lastname-1",
         "newkey": "name-middlename-lastname"
    },

    {
          "id":"123",
          "name": "fname-flast-2",
          "newkey": "fname-flast"
    }

每个对象中的字段名称是一个字符串,其中的字符和数字用“ - ”连字符分隔。我需要从开头到起始编号的完整字符串。我不想要这个号码之后的任何东西。然后使用键 newkey 添加 new 字段,并且应该提取不带数字的字符串值。因此,输出应包含旧字段和新字段。

1 个答案:

答案 0 :(得分:1)

jq 解决方案:

示例input.json

[
  {
    "id": "abc",
    "name": "name-middlenane-lastname-1"
  },
  {
    "id": "123",
    "name": "fname-flast-2"
  }
]
jq 'map(. + (.name | capture("(?<newkey>.+)-[0-9]+")) )' input.json

输出:

[
  {
    "id": "abc",
    "name": "name-middlenane-lastname-1",
    "newkey": "name-middlenane-lastname"
  },
  {
    "id": "123",
    "name": "fname-flast-2",
    "newkey": "fname-flast"
  }
]