使用 jq 将 json 转换为 csv
Using jq to convert json to csv
我正在尝试使用正确的 jq 语法将 json 转换为 csv。
想要的结果:
<email>,<id>,<name>
e.g.
user1@whatever.nevermind.no,0,general
user2@whatever.nevermind.no,0,general
user1@whatever.nevermind.no,1,local
...
- 注意还需要忽略空对象"agent_priorities"
输入
[
{
"id": 0,
"name": "General",
"agent_priorities": {
"user1@whatever.nevermind.no": "normal",
"user2@whatever.nevermind.no": "normal"
}
},
{
"id": 1,
"name": "local",
"agent_priorities": {
"user1@whatever.nevermind.no": "normal"
}
},
{
"id": 2,
"name": "Engineering",
}
]
将 id 和 name 存储在变量中,然后遍历 agent_priorities
:
的键
jq -r '.[]
| .id as $id
| .name as $name
| .agent_priorities
| keys
| .[]
| [., $id, $name ]
| @csv
' file.json
已接受答案的以下变体根据要求检查“agent_priorities”键是否存在,并使用 keys_unsorted
来保留键的顺序:
jq -r '
.[]
| select(has("agent_priorities"))
| .id as $id
| .name as $name
| .agent_priorities
| keys_unsorted[]
| [., $id, $name ]
| @csv
' file.json
我正在尝试使用正确的 jq 语法将 json 转换为 csv。
想要的结果:
<email>,<id>,<name>
e.g.
user1@whatever.nevermind.no,0,general
user2@whatever.nevermind.no,0,general
user1@whatever.nevermind.no,1,local
...
- 注意还需要忽略空对象"agent_priorities"
输入
[
{
"id": 0,
"name": "General",
"agent_priorities": {
"user1@whatever.nevermind.no": "normal",
"user2@whatever.nevermind.no": "normal"
}
},
{
"id": 1,
"name": "local",
"agent_priorities": {
"user1@whatever.nevermind.no": "normal"
}
},
{
"id": 2,
"name": "Engineering",
}
]
将 id 和 name 存储在变量中,然后遍历 agent_priorities
:
jq -r '.[]
| .id as $id
| .name as $name
| .agent_priorities
| keys
| .[]
| [., $id, $name ]
| @csv
' file.json
已接受答案的以下变体根据要求检查“agent_priorities”键是否存在,并使用 keys_unsorted
来保留键的顺序:
jq -r '
.[]
| select(has("agent_priorities"))
| .id as $id
| .name as $name
| .agent_priorities
| keys_unsorted[]
| [., $id, $name ]
| @csv
' file.json