【问题标题】:Add parent array name into JSON as key:value将父数组名称作为 key:value 添加到 JSON 中
【发布时间】:2020-02-18 22:46:12
【问题描述】:

我有这样的 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": []
}

如何以父数组的名称添加到任何叶子键:值并完全删除这种划分为数组?

我尝试将 jq 与 .[][]|= . + {"pair": path(.) } 一起使用,但我不知道如何正确编写 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
  }
]

【问题讨论】:

  • @peak 的回答非常完美。谢谢
  • 那么你应该接受它。

标签: json key jq


【解决方案1】:

根据您的输入(更正小错误后),以下 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[] // {}) ]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-01
    • 2018-09-21
    • 2021-11-22
    • 1970-01-01
    • 2018-04-09
    • 2019-05-26
    相关资源
    最近更新 更多