我正在尝试使用jq将我的json搜索结果从Elasticsearch转换为csv格式。
我的实际jq命令如下所示:
.aggregations["byLabels"].buckets | map({key,doc_count,range: .byRange.buckets | map({str:(.from_as_string + "-" + .to_as_string), dc:.doc_count} | [.str, .dc])} | flatten )
实际结果:
[
[
"Page 1",
15001,
"0.0-1000.0",
7,
"1000.0-2000.0",
1005,
"2000.0-",
8907
],
[
"Page 2",
340,
"0.0-1000.0",
23,
"1000.0-2000.0",
261,
"2000.0-",
18
]
]
但我需要的csv输出应该是这样的(带或不带引号):
"Page1",15001,"0.0-1000.0",7,1000.0-2000.0,1005,"2000.0-*",8907
"Page2",340,"0.0-1000.0",23,1000.0-2000.0,261,"2000.0-*",18
我尝试添加额外的add []或flatten或join(“,”)过滤器,但只在尝试使用| @csv时出错。
这是我第一次使用jq,所以我认为这对任何jq用户体验都不是问题。
原始的json文件如下所示:
{
"took" : 3,
"timed_out" : false,
"_shards" : {
"total" : 5,
"successful" : 5,
"failed" : 0
},
"hits" : {
"total" : 51632,
"max_score" : 0.0,
"hits" : [ ]
},
"aggregations" : {
"byLabels" : {
"doc_count_error_upper_bound" : 0,
"sum_other_doc_count" : 2478,
"buckets" : [ {
"key" : "Page 1",
"doc_count" : 15001,
"byRange" : {
"buckets" : {
"0.0-1000.0" : {
"from" : 0.0,
"from_as_string" : "0.0",
"to" : 1000.0,
"to_as_string" : "1000.0",
"doc_count" : 7
},
"1000.0-2000.0" : {
"from" : 1000.0,
"from_as_string" : "1000.0",
"to" : 2000.0,
"to_as_string" : "2000.0",
"doc_count" : 1005
},
"2000.0-*" : {
"from" : 2000.0,
"from_as_string" : "2000.0",
"doc_count" : 8907
}
}
}
}, {
"key" : "Page 2",
"doc_count" : 340,
"byRange" : {
"buckets" : {
"0.0-1000.0" : {
"from" : 0.0,
"from_as_string" : "0.0",
"to" : 1000.0,
"to_as_string" : "1000.0",
"doc_count" : 23
},
"1000.0-2000.0" : {
"from" : 1000.0,
"from_as_string" : "1000.0",
"to" : 2000.0,
"to_as_string" : "2000.0",
"doc_count" : 261
},
"2000.0-*" : {
"from" : 2000.0,
"from_as_string" : "2000.0",
"doc_count" : 18
}
}
}
} ]
}
}
}
感谢您的帮助。
答案 0 :(得分:2)
@csv仅适用于平面阵列,因此您可以添加“|” 。[] | @csv'到您的管道。