【发布时间】:2020-05-06 07:44:09
【问题描述】:
我想使用 jq 将以下 JSON 转换为 csv 格式。我知道有很多类似的问题,但我无法根据它们弄清楚。
{
"one": {
"firstName": "John",
"lastName": "Smith",
"gender": "man",
"age": 32,
"address": {
"streetAddress": "21 2nd Street",
"city": "New York",
"state": "NY",
"postalCode": "10021"
}
},
"two": {
"firstName": "Johnny",
"lastName": "Smithy",
"gender": "man",
"age": 33,
"address": {
"streetAddress": "22 2nd Street",
"city": "New York",
"state": "NY",
"postalCode": "10021"
}
}
}
输出应如下所示。我正在努力将嵌套对象作为地址键的值。
number,firstName,lastName,gender,age,streetAddress,city,state,postalCode
one,John, Smith,man, 32, 21 2nd Street, New York, NY, 10021
two, Johnny, Smith,man, 33, 22 2nd Street, New York, NY, 10021
我能做的最好的事情就是顺势而为,但它并没有接近...... 非常感谢您的帮助
jq --raw-output 'to_entries | map_values({ job: .key } + .value )'
【问题讨论】:
-
您是否尝试过使用每个对象中的标量创建一个数组并将它们传递给@csv 过滤器?喜欢
jq -r 'keys[] as $k | [ $k ] + [ .[$k] | getpath(paths(scalars)) ] | @csv' file -
谢谢!看起来很有希望。你知道我如何将键作为标题行吗?像这样:`号码,名字,姓氏,性别,年龄,街道地址,城市,州,邮政编码`
-
如果它是恒定的,只需将它传递给 csv 过滤器,然后再传递给其他所有内容。否则你可以从第一个对象复制它
-
不幸的是,它不会是恒定的,你能告诉我在这种情况下怎么做吗?