json - 使用 JQ 格式化嵌套的 JSON 输入?
问题描述
我正在尝试使用 jq 将下面的示例输入转换为下面的输出:
输入 JSON
"elements": [
{
"type": "CustomObjectData",
"id": "2185",
"fieldValues": [
{
"type": "FieldValue",
"id": "169",
"value": "9/6/2017 12:00:00 AM"
},
{
"type": "FieldValue",
"id": "190",
"value": "ABC"
}
]
},
{
"type": "CustomObjectData",
"id": "2186",
"contactId": "13",
"fieldValues": [
{
"type": "FieldValue",
"id": "169",
"value": "8/31/2017 12:00:00 AM"
},
{
"type": "FieldValue",
"id": "190",
"value": "DEF"
}
]
}
]
期望的输出(按 id 分组)
本质上是试图从每个“fieldValues”对象中提取“value”字段并按“id”分组
{
"id:"2185",
"value": "9/6/2017 12:00:00 AM",
"value": "ABC"
},
{
"id:"2186",
"value": "8/31/2017 12:00:00 AM",
"value": "DEF"
}
我应该使用什么 jq 语法来实现这一点?非常感谢!!
解决方案
假设 Q 中显示的输入已以明显的方式修改为有效 JSON,以下过滤器将生成如下所示的输出,即类似于包含在中的所谓预期输出的有效 JSON 值流Q. 如果需要单个数组,一种可能性是将程序包装在方括号中。
程序.jq
.elements[]
| {id, values: [ .fieldValues[].value] }
输出
{
"id": "2185",
"values": [
"9/6/2017 12:00:00 AM",
"ABC"
]
}
{
"id": "2186",
"values": [
"8/31/2017 12:00:00 AM",
"DEF"
]
}
生成 CSV
多种可能性之一:
.elements[]
| [.id] + [.fieldValues[].value]
| @csv
使用 -r 命令行选项,这将生成以下 CSV:
"2185","9/6/2017 12:00:00 AM","ABC"
"2186","8/31/2017 12:00:00 AM","DEF"
推荐阅读
- r - R: 无法更新包 clang 找不到头文件
- python - 来自生成器的高效 df 插入
- sas - 如何使 SAS 数据集的第一行成为变量名称?
- netlogo - Netlogo:邻里之和
- webpack - Package.json 脚本环境变量
- asp.net - 引导模式未显示在基本 ASP.NET Core Web 角度应用程序中
- docker - Docker 与 Docker-compose 与 dockerignore
- php - 仅修改属于较大字符串的特定字符串
- javascript - 如何使用 JavaScript 操作选定选项的值与选项文本相同
- discord.js - 有没有办法检查不和谐机器人是否加入服务器?