【发布时间】:2020-11-06 08:47:36
【问题描述】:
我有以下 JSON 数据:
% cat test2
{"day":"2020-07-15","map":
{"a":"ask","b":"bid","t":"timestamp"},"msLatency":52,"pair":"EUR/USD","status":"success","ticks":[
{"b":1.14105,"a":1.14106,"x":48,"t":1594771200000},
{"b":1.14105,"a":1.14106,"x":48,"t":1594771201000},
{"b":1.14103,"a":1.14104,"x":48,"t":1594771202000},
{"b":1.141,"a":1.1413,"x":48,"t":1594771203000},
{"b":1.14103,"a":1.14104,"x":48,"t":1594771205000},
{"b":1.14094,"a":1.14095,"x":48,"t":1594778803000}],"type":"forex"}
我想得到:
1.14105,1.14106,1594771200000
1.14105,1.14106,1594771201000
1.14103,1.14104,1594771202000
1.141,1.1413,1594771203000
1.14103,1.14104,1594771205000
1.14094,1.14095,1594778803000
理想情况下,输出也应该用零填充,1 和 5 是参数,以指定前两列是具有 1 个自然位和 5 个小数位的数字(尽管此步骤可以使用 awk 轻松完成):
1.14105,1.14106,1594771200000
1.14105,1.14106,1594771201000
1.14103,1.14104,1594771202000
1.14100,1.14130,1594771203000
1.14103,1.14104,1594771205000
1.14094,1.14095,1594778803000
我用 JQ 试过这个:
% cat test2 | jq '.ticks'
[
{
"b": 1.14105,
"a": 1.14106,
"x": 48,
"t": 1594771200000
},
{
"b": 1.14105,
"a": 1.14106,
"x": 48,
"t": 1594771201000
},
{
"b": 1.14103,
"a": 1.14104,
"x": 48,
"t": 1594771202000
},
{
"b": 1.141,
"a": 1.1413,
"x": 48,
"t": 1594771203000
},
{
"b": 1.14103,
"a": 1.14104,
"x": 48,
"t": 1594771205000
},
{
"b": 1.14094,
"a": 1.14095,
"x": 48,
"t": 1594778803000
}
]
但我不知道如何将其转换为 CSV。
编辑: 作为参考,我之前有以下解析,这里使用 JQ 是更简单的选择:
cat test2 |
sed -e 's/{\"/#{\"/g' |
tr '#' '\n' |
grep -v "timestamp" |
grep -v "day" |
sed '/^[[:space:]]*$/d' |
sed 's/].*$//g' |
sed 's/{//g' |
sed 's/},//g' |
sed 's/}//g' |
sed 's/\"//g' |
awk -F '[:,]' -v decimal_places=5 -v integer_places=1 '{
for(i=1; i<=NF; i=i+2) {
value[$i]=$(i+1);
};
format_price="%0" integer_places "." decimal_places "f"
format=format_price " " format_price " %d\n"
printf(format,value["b"],value["a"],value["t"]);
}'
【问题讨论】:
-
我知道我以前做过这件事,而且用
jq做起来非常困难。老实说,我会忘记使用jq来完成这项任务并使用python(或几乎任何其他语言)。只需将 JSON 解组为 dict,然后挑选出您想要的元素并打印它们。这会容易得多。 -
感谢您的建议,让我们看看是否有其他关于如何使用 JQ 执行此操作的意见或示例。作为参考,管道
sed和awk相对容易,因为您通过小步骤构建解析。然而,在询问awk中的最后一步时,有人建议我 JQ 也可能对这种情况有所帮助。 stackoverflow.com/questions/62925668/…
标签: json export-to-csv precision jq