首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从现有的JSON值中添加新的JSON键

从现有的JSON值中添加新的JSON键
EN

Stack Overflow用户
提问于 2022-06-21 15:57:58
回答 2查看 123关注 0票数 0

我有以下JSON;

代码语言:javascript
复制
[
  {
    "id": 1,
    "start": "2022-06-20",
    "result": 24
  },
  {
    "id": 2,
    "start": "2022-06-21",
    "result": 56
  },
  {
    "id": 3,
    "start": "2022-06-21",
    "result": 78
  }
]

我希望使用JQ、dimensiondate向上面的每个数组添加2个新值,但是date需要是现有键值start的副本。预期产出如下:

代码语言:javascript
复制
[
  {
    "id": 1,
    "start": "2022-06-20",
    "result": 24,
    "date": "2022-06-20",
    "dimension": "new"
  },
  {
    "id": 2,
    "start": "2022-06-21",
    "result": 56,
    "date": "2022-06-21",
    "dimension": "new"
  },
  {
    "id": 3,
    "start": "2022-06-21",
    "result": 78,
    "date": "2022-06-21",
    "dimension": "new"
  }
]

我目前拥有的jq可以添加新的键dimension,但是我不知道如何复制start -> date

代码语言:javascript
复制
jq '.[] += {"dimension": "new"}' input.json

谢谢你的帮助

EN

回答 2

Stack Overflow用户

发布于 2022-06-21 16:09:32

只需创建新的键/值对即可。

代码语言:javascript
复制
jq 'map(.date = .start | .dimension = "new")' input.json
票数 4
EN

Stack Overflow用户

发布于 2022-06-21 16:55:10

您可能尝试了以下几种方法:

代码语言:javascript
复制
.[] += { date: .start, dimension: "new" }    // WRONG

但这并不完全正确,因为.是数组,而不是数组的元素。您可以使用|=作为调理器。

代码语言:javascript
复制
.[] |= ( . += { date: .start, dimension: "new" } )

但我会用map代替。

代码语言:javascript
复制
map( . += { date: .start, dimension: "new" } )

或者,

代码语言:javascript
复制
. += { date: .start, dimension: "new" }

也可以使用

代码语言:javascript
复制
.date = .start | .dimension: "new"

所以你可以用

代码语言:javascript
复制
.[] |= ( .date = .start | .dimension: "new" )

代码语言:javascript
复制
map( .date = .start | .dimension = "new" )
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72703865

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档