【发布时间】:2022-01-25 05:01:22
【问题描述】:
我有一个从 JSON 转换而来的对象,其中包含有关“受信任的客户”的信息。有两个属性,其中一个标识客户端的唯一性:Name AND Thumbprint,所以如果有元素,要么包含相同的Name 或Thumbprint,它们必须是省略。
另外,我想指出,输出数组应该包含附加属性 - Id,可以使用 - New-Guid 生成。此处讨论了该特殊情况:enter link description here。
{
"TrustedClients": [
{
"Name": "Client1",
"Thumbprint": "5ed7eb688e404bd787585637975ddb01",
"CallbackThumbprint": "b7f610106fa24afe9460ab8e4f2db1fc"
},
{
"Name": "Client2",
"Thumbprint": "5ed7eb688e404bd787585637975ddb01",
"CallbackThumbprint": "b7f610106fa24afe9460ab8e4f2db1fc"
},
{
"Name": "Client3",
"Thumbprint": "1700a8497495d6053be04b690b98479fd62e6cc9",
"CallbackThumbprint": "b7f610106fa24afe9460ab8e4f2db1fc"
}
]
}
有没有一种有效的方法来获取由Name AND Thumbprint 属性指定的唯一对象数组?所以在这种情况下,输出数组应该只包含一个名为 Client3 的对象,因为有两个元素具有相同的 Thumbprint 值:
{
"TrustedClients": [
{
"Id": "{(New-Guid).ToString()}"
"Name": "Client3",
"Thumbprint": "1700a8497495d6053be04b690b98479fd62e6cc9",
"CallbackThumbprint": "b7f610106fa24afe9460ab8e4f2db1fc"
}
]
}
一开始我在用 grouping 进行调整,但它与基本思想相冲突 - Name AND Thumbprint 的唯一性。很明显,通过Name AND Thumbprint 分组 元素可能会返回具有不同Name 值的数组,但相同的Thumbprint 值,反之亦然。
【问题讨论】:
-
“很明显,按名称和指纹对元素进行分组可能会返回具有不同名称值的数组,但相同的指纹,反之亦然。” - 我看不出这是多么明显。
$jsonObject.TrustedClients |Group-Object Name,Thumbprint是否将具有不同Name值的对象组合在一起?如果是这样,那就是一个错误。 -
可能我错过了什么,但
$jsonObject.TrustedClients |Group-Object Name,Thumbprint返回相同的数组。对我来说很明显,当通过指定 keys 对某些内容进行分组时,keys 本身的 values 必须是唯一的。在这种特殊情况下,由于有两个相同的Thumbprint和相同的Name,因此分组返回两个不同的对象,它们具有不同的Names 但相同的Thumbprint -
您是否忘记发布(部分)输入数据?您发布的 JSON 中没有两个具有相同
Name属性的对象。 -
对不起,我明白你的意思,我相信。 “很明显,按名称和指纹对元素进行分组可能会返回具有不同名称值的数组”:当然,这不是获得唯一对象集合的方法。我的意思是,在这种情况下,通过
Name和Thumbprint分组 是获得所需结果的错误方法。所以我想要的是获得一个唯一的对象数组,其中Name和Thumbprint值不会在数组的任何对象中重复 -
根据您显示的数据,那么在
Thumbprint上分组还不够吗?您想如何处理冲突的名称?合并前两个条目的结果(基于它们的共同指纹值5ed7eb688e404bd787585637975ddb01)是否应该具有Name“Client1”或“Client2”(或其他完全)?
标签: json powershell duplicates