我有此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"
如果您确实想要有效的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