Добавьте имя родительского массива в JSON как ключ: значение - PullRequest
1 голос
/ 19 февраля 2020

У меня JSON вот так:

{
  "binance_BTCUSDT": [
    {
      "price": "12/02 00:00",
      "time": "10232.79",
      "achg": -0.006151
    },
    {
      "time": "12/02 17:01",
      "price": "10342.92",
      "achg": -0.007977
    },
  ],
  "binance_ZECBNB": [
    {
      "time": "09/02 03:53",
      "price": "3.052",
      "achg": 0.1
    }
  ],
  "binance_ZENBTC": []
}

Как добавить к любому листу ключ: значение с именем родительского массива и вообще удалить такое деление на массивы?

I попытался использовать JQ с .[][]|= . + {"pair": path(.) }, но я не понимаю, как правильно написать путь ().

Ожидаемый результат

[
  {
    "pair": "binance_BTCUSDT",
    "price": "12/02 00:00",
    "time": "10232.79",
    "achg": -0.006151
  },
  {
    "pair": "binance_BTCUSDT",
    "time": "12/02 17:01",
    "price": "10342.92",
    "achg": -0.007977
  },
  {
    "pair": "binance_ZECBNB",
    "time": "09/02 03:53",
    "price": "3.052",
    "achg": 0.1
  }
]

1 Ответ

0 голосов
/ 19 февраля 2020

С вашим вводом (после исправления незначительной ошибки) следующий фильтр jq производит вывод, показанный ниже:

[ to_entries[] | {pair: .key} + .value[] ]

Выход

[
  {
    "pair": "binance_BTCUSDT",
    "price": "12/02 00:00",
    "time": "10232.79",
    "achg": -0.006151
  },
  {
    "pair": "binance_BTCUSDT",
    "time": "12/02 17:01",
    "price": "10342.92",
    "achg": -0.007977
  },
  {
    "pair": "binance_ZECBNB",
    "time": "09/02 03:53",
    "price": "3.052",
    "achg": 0.1
  }
]

Изменение

Если вы хотите сохранить запись, соответствующую { "binance_ZENBTC": []}, тогда подойдет следующий фильтр:

[to_entries[] | {pair: .key} + (.value[] // {}) ]
...