如何使用`jq`将密钥复制到对象中?

时间:2018-05-15 22:25:05

标签: json bash key jq data-manipulation

我的输入JSON如下所示:

{
  "2018-05-15T22:00:00Z": {
    "foo": "0.0",
    "bar": "90.0"
  },
  "2018-05-15T22:30:00Z": {
    "foo": "0.0",
    "bar": "70.0"
  }
}

我想将密钥(即日期时间)复制到对象本身,最终得到:

{
  "2018-05-15T22:00:00Z": {
    "date": "2018-05-15T22:00:00Z",
    "foo": "0.0",
    "bar": "90.0"
  },
  "2018-05-15T22:30:00Z": {
    "date": "2018-05-15T22:30:00Z",
    "foo": "0.0",
    "bar": "70.0"
  }
}

然后我将外部对象折叠为一个数组(使用map(.)),以便最终结果是日期已经移动到每个对象中。

2 个答案:

答案 0 :(得分:1)

一种方法是使用to_entries将您的商品拆分为键/值对,之后可以直接引用每件商品。

$ jq '[to_entries[] | .key as $time | .value | .["time"]=$time]' <<<"$in"
[
  {
    "foo": "0.0",
    "bar": "90.0",
    "time": "2018-05-15T22:00:00Z"
  },
  {
    "foo": "0.0",
    "bar": "70.0",
    "time": "2018-05-15T22:30:00Z"
  }
]

答案 1 :(得分:1)

略微更经济:

with_entries(.value = ({date: .key} + .value))

按照Q。

发出对象