json - JQ - 在数组打印后获取另一个更高级别的键值
问题描述
我有这个 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
推荐阅读
- python - python:将列表中的元素组合在一起
- amazon-web-services - 如何配置 AWS ELB 来代替 NGiNX 服务器及其设置?
- azure-cognitive-search - 从 blob 导入 zip 文件的 azure-search 支持什么数据格式?
- php - 在 Ajax 中自动更新,而无需在文本字段中输入
- javascript - Firefox 不在打印弹出窗口中显示表头
- react-native - 使用 ImageBackground 时反应本机错误代码 500
- sql - 需要帮助查看 1 个表但可能需要子查询或连接的查询
- angular - 'this' 在类成员上返回未定义
- html - ionic 4 - 加载微调器在无限滚动中不起作用
- python - Django ORM Query 输出很奇怪