【发布时间】:2020-06-19 02:58:09
【问题描述】:
我的输入 json 看起来像这样:
[{
"methodResponse":{
"params":{
"param":{
"value":{
"struct":{
"member":[
{
"name":"severity",
"value":{
"string":"Low"
}
},
{
"name":"product",
"value":{
"string":"p1"
}
}
]
}
}
}
}
}
}]
我想通过“名称”值过滤将每个“成员”条目提取到一个新的 json 对象中。
输出应该是这样的:
[
{
"severity": "Low",
"product": "p1"
}
]
成员项目的顺序可以改变。
我可以通过“名称”值选择值,但如果成员项目的顺序发生变化,它就不起作用。
[.[].methodResponse.params.param.value.struct.member[] | select(.name == "severity").value.string, select(.name == "product").value.string] | [{severity:.[0], product:.[1]}]
另一个问题是如果名称值没有找到成员。如果未按名称找到成员,则应为缺少的成员值打印 null-> "missingmemberName": null
[
{
"severity": "Low",
"product": "p1",
"missingmemberName": null
}
]
https://jqplay.org/s/CthSsOCQ-Y
感谢您的帮助
【问题讨论】:
-
你能显示一个有一个没有名字的成员的对象吗?您的最后一个输出
p1是一个有效的产品名称,它如何与missingmemberName一起显示? -
我的意思是,因为输入 json 是动态的,所以可能不存在 im 过滤的名称。例如-> 我正在搜索“select(.name == "severity").value.string”-> 但在某些情况下,整个成员项不存在,但我需要在我的 json 输出中使用 null 值的属性。