【发布时间】:2019-04-17 11:21:14
【问题描述】:
我需要从具有以下结构的JSON 文件创建csv 报告(尽可能简化):
{
"data": [
{
"id": "123",
"foo": {
"item": {
"value": "foo_good",
"bar_id": "1"
}
},
"bar": {
"item": {
"id": "1",
"value": "bar_value_1a"
}
},
"var": {
"item": {
"value": "var_value_1a",
"bar_id": "1"
}
}
},
{
"id": "456",
"foo": {
"item": [
{
"value": "foo_bad",
"bar_id": "1"
},
{
"value": "foo_good",
"bar_id": "2"
},
{
"value": "foo_good",
"bar_id": "2"
},
{
"value": "foo_bad",
"bar_id": "3"
},
{
"value": "foo_good",
"bar_id": "4"
}
]
},
"bar": {
"item": [
{
"id": "1",
"value": "bar_value_2a"
},
{
"id": "2",
"value": "bar_value_2b"
},
{
"id": "3",
"value": "bar_value_2c"
},
{
"id": "4",
"value": "bar_value_2d"
}
]
},
"var": {
"item": [
{
"value": "var_value_2a",
"bar_id": "1"
},
{
"value": "var_value_2b",
"bar_id": "2"
},
{
"value": "var_value_2c",
"bar_id": "3"
},
{
"value": "var_value_2d",
"bar_id": "4"
}
]
}
}
]
}
数据结构:
-
foo.item和var.item连接到bar.item和bar_id - 一个或多个
foo.item指向一个bar.item - 多个
foo.item指向同一个bar.item将有相同的foo.item.value - 恰好一个
var.item指向一个bar.item - 所有项目均按
bar_id排序 - 格式不一致。如果只有一项,
bar.item是一个对象,否则它是一个数组(也适用于foo.item和var.item) - 我被这种格式卡住了
输出报告:
- 处理所有
data对象 - 为每个不具有任何对应
foo.item且值为foo_bad的bar.item创建报告 - 输出格式:
.id, .bar.item.value, .var.item.value
我的尝试:
我目前使用的临时 jq 脚本丢弃了多个 bar.item 等,并仅创建了对真实数据的估计:
.data[]
| .foo.item |= if type=="array" then .[0] else . end
| .bar.item |= if type=="array" then .[0] else . end
| .var.item |= if type=="array" then .[0] else . end
| select(.foo.item.value != "foo_bad")
| [.id,.bar.item.value,.var.item.value]
| @csv
输出如下:
"123","bar_value_1a","var_value_1a"
期望的输出:
"123","bar_value_1a","var_value_1a"
"456","bar_value_2b","var_value_2b"
"456","bar_value_2d","var_value_2d"
我更喜欢使用jq,尽管我并不坚持。
【问题讨论】: