Как скопировать ключ в объект, используя `jq`? - PullRequest
0 голосов
/ 16 мая 2018

Мой входной 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 голосов
/ 16 мая 2018

Чуть экономичнее:

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

Это излучает объект согласно Q.

0 голосов
/ 16 мая 2018

Один из подходов - использовать 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"
  }
]
...