json - jq 将 JSON 子数组对象转换为分隔字符串
问题描述
我想用 jq 转换以下输入:
{
"root":[
{
"field1":"field1value1",
"field2":"field2value2",
"field3Array":[
{
"prop1":"prop1_value1"
}
]
},
{
"field1":"field1value3",
"field2":"field2value4",
"field3Array":[
{
"prop1":"prop1_value3"
},
{
"prop1":"prop1_value4"
}
]
}
]
}
输出应该是:
[
{
"field1": "field1value1",
"field2": "field2value2",
"field3Array": "prop1_value1"
},
{
"field1": "field1value3",
"field2": "field2value4",
"field3Array": "prop1_value3,prop1_value4"
}
]
到目前为止,我使用这个 jq 过滤器:
[.root[] | {field1, field2, field3Array: .field3Array[].prop1}]
但我不知道如何将数组属性加入"prop1"
逗号分隔的字符串"prop1_value3,prop1_value4"
。
解决方案
您需要将 中包含的对象映射field3Array
到它们的字符串值并加入结果数组:
.root | map({field1, field2, field3Array: .field3Array | map(.prop1) | join(",")})
你可以在这里试试。
.field3Array
在以下我们可以就地更新而不是重新创建整个对象时,可以稍微简化它:
.root | map(.field3Array |= (map(.prop1) | join(",")))
你可以在这里试试。
如果您不熟悉该map
功能,以下方法也可以:
[.root[] | {field1, field2, field3Array: [ .field3Array[] | .prop1 ] | join(",")}]
你可以在这里试试。
推荐阅读
- python - pandas groupby 在组内具有排除条件
- javascript - Github 添加/删除的数量似乎与项目的行数不相上下
- javascript - 检查对象数组中的所有属性值是否相同
- javascript - 如何在.map中获取整个数组?
- c++ - 对于派生对象的基类型指针,make_unique 的语法是什么?
- python - Pygame没有定义?
- sql - Redshift 查询需要很长时间进行分组
- go - 你如何反思地调用 Go 结构的方法?
- java - 使用本机代码从后台颤振应用程序启动活动
- netlogo - 我怎么打电话
- 这里的程序当 是作为参数或netlogo 中的函数内的参数传递吗?