JQ-在数组打印后获取另一个更高级别的键值

问题描述 投票:0回答:1

我有此JSON数据:

price_history.json

{
  "candles": [
    {
      "open": 26,
      "high": 26.25,
      "low": 25.75,
      "close": 26.0625,
      "volume": 1038600,
      "datetime": 957762000000
    },
    {
      "open": 25.8125,
      "high": 26.25,
      "low": 25.75,
      "close": 26,
      "volume": 765900,
      "datetime": 957848400000
    }
  ],
  "symbol": "ABC",
  "empty": false
}

我需要将其转换为CSV。我可以使用以下过滤器获得几乎所有所需的东西,但我想添加数组外部的符号:

cat price_history.json | jq '.candles[] | (.open|tostring) + "," + (.high|tostring)  + "," + (.low|tostring)  + "," + (.close|tostring)  + "," + (.volume|tostring)  + "," + (.datetime|tostring)' 

响应:

"26,26.25,25.75,26.0625,1038600,957762000000"
"25.8125,26.25,25.75,26,765900,957848400000"

期望的响应:

"26,26.25,25.75,26.0625,1038600,957762000000,ABC"
"25.8125,26.25,25.75,26,765900,957848400000,ABC"

我已经尝试了许多组合,尝试回到顶层以拾取符号,包括尝试首先拾取它。我不在乎它在行中的位置

这是我得到的最接近的东西,它具有所有功能,但可以打印键和不需要的所有内容:

cat /home/utility/scripts/marketScan/app/modules/api-comm/tdam/port/input/price_history-2.txt | jq '(.candles[]|tostring) + "," + (.symbol|tostring)'

响应

"{\"open\":26,\"high\":26.25,\"low\":25.75,\"close\":26.0625,\"volume\":1038600,\"datetime\":957762000000},ABC"
""{\"open\":25.8125,\"high\":26.25,\"low\":25.75,\"close\":26,\"volume\":765900,\"datetime\":957848400000},ABC"
json export-to-csv jq
1个回答
0
投票

如果您确实想要有效的CSV,通常最好将@csv与-r命令行选项结合使用。就您而言,您可以使用:

.symbol as $symbol
| .candles[]
| [.open, .high, .low, .close, .volume, .datetime, $symbol]
| @csv

或等效地,但没有$变量:

(.candles[] | [.open, .high, .low, .close, .volume, .datetime]) + [.symbol]
| @csv

如果您愿意冒险,也可以考虑:

.symbol as $symbol
| .candles[]
| [.[], $symbol]
| @csv
© www.soinside.com 2019 - 2024. All rights reserved.