以下是输入的 JSON:
{
"sn": "fdd",
"sc": [
{
"pn": "di",
"pv": {
"val": "26",
"com": "="
},
"fix": "Hello",
"tp": "String"
},
{
"pn": "di2",
"pv": {
"val": "28",
"com": "="
},
"fix": "Hello2",
"tp": "String"
}
]
}
下面是我尝试过的 JQ 命令,它生成相同的对象:
def getWhereVal(input):
[input.sc[]] | unique;
def getPreVal(input):
input.sc[].fix;
. as $input | getPreVal($input) as $preVal | getWhereVal($input)
我从上面的 JQ 命令得到以下输出:
[
{
"pn": "di",
"pv": {
"val": "26",
"com": "="
},
"fix": "Hello",
"tp": "String"
},
{
"pn": "di2",
"pv": {
"val": "28",
"com": "="
},
"fix": "Hello2",
"tp": "String"
}
]
[
{
"pn": "di",
"pv": {
"val": "26",
"com": "="
},
"fix": "Hello",
"tp": "String"
},
{
"pn": "di2",
"pv": {
"val": "28",
"com": "="
},
"fix": "Hello2",
"tp": "String"
}
]
我的目标是从一组相同的对象中检索不同的对象,如下所示:
{
"pn": "di",
"pv": {
"val": "26",
"com": "="
},
"fix": "Hello",
"tp": "String"
},
{
"pn": "di2",
"pv": {
"val": "28",
"com": "="
},
"fix": "Hello2",
"tp": "String"
}
有人可以帮助我获得所需的输出,我无法使用独特的函数获得结果。
正如 Inian 的评论所解释的,要获取唯一值,只需运行
.sc | unique
此处示例(或 unique[]
以数组形式获取)。
顺便说一句,如果“唯一”约束基于某个字段,那么您可以运行
.sc | unique_by(.pn)
。 这里 约束是由 pn
。
但看来这不是问题。目前还不太清楚你想要什么,因为定义为“输入 JSON”的第一个 JSON 甚至不是一个列表,但你说你有两个列表(两个列表在哪里???)
因此,假设第二个 JSON 作为输入(如果这个假设不成立,则关键概念将是相同的),您可以尝试如下操作:连接列表,然后您可以使用
unique
,如上所述。
只需尝试类似这个示例,其中我使用过
.[0] + .[1] | unique
,但也许您的列表位于某个对象键或其他内容中,然后只需连接所需的列表即可,结果将是相同的。