1) 我正在尝试使用 jq 从 json 生成 CSV 文件。 2)我需要父键以及子数组中的一个键值对 3)其中包含最新日期的值将是生成的键值对 4) 需要从该结果生成 csv
这是我的 json
{
"students": [
{
"name": "Name1",
"class": "parentClass1",
"teacher": "teacher1",
"attendance": [
{
"key": "class1",
"value": "01-DEC-2018"
},
{
"key": "class1",
"value": "28-Nov-2018"
},
{
"key": "class1",
"value": "26-Oct-2018"
}
]
},
{
"name": "Name2",
"class": "parentClass2",
"teacher": "teacher2",
"attendance": [
{
"key": "class2",
"value": "05-DEC-2018"
},
{
"key": "class2",
"value": "25-Nov-2018"
},
{
"key": "class2",
"value": "20-Oct-2018"
}
]
}
]
}
我没有取得太大进展,我正在尝试创建这样的 csv
jq '.students[] | [.name, .class, attendance[].key,.properties[].value] | @csv ' main.json
下面是该 json 的预期 CSV
Name ParentClass key dateValue Summary
Name1 parentClass1 class1 150 days ago(difference with today date with latest date i.e 01-DEC-2018 ) Teacher1.parentClass1
Name2 parentClass2 class2 150 days ago(difference with today date with latest date i.e 05-DEC-2018 ) Teacher2.parentClass2
最佳答案
使用strptime
解析日期并将结果分配给value,这样您就可以使用max_by获取最新的出勤
.使用 mktime
将值转换为自纪元以来的秒数,从现在中减去它,除以 24 * 60 * 60 以获得自此以来的天数。
$ jq -r '
def days_since:
(now - .) / 86400 | floor;
.students[]
| [ .name, .class ] +
( .attendance
| map(.value |= strptime("%d-%b-%Y"))
| max_by(.value)
| [ .key, "\(.value | mktime | days_since) days ago" ]
) +
[ .teacher + "." + .class ]
| @tsv' file
Name1 parentClass1 class1 148 days ago teacher1.parentClass1
Name2 parentClass2 class2 144 days ago teacher2.parentClass2
请注意,此解决方案不处理夏令时更改。
关于json - 如何从 json 数组获取最新日期键值对(包括父键),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55888155/