json - Powershell:比较对象不比较嵌套对象

标签 json powershell comparison

或者我是如何不再担心并学会爱上弦乐收藏的

给定以下两个 json 字符串:

$jsonString1 = '{ "baz": "quuz", "cow": [ "moo", "CUD" ], "foo": "bar" }'
$jsonstring2 = '{ "baz": "quuz", "cow": [ "moo", "GRASS" ], "foo": "bar" }'

我想了解它们所代表的对象的差异
<# First attempt: Convert each to an object, then compare normally #>
function Compare-Json {
    <# Make powershell objects from each string #>
    $obj1 = $jsonString1 | ConvertFrom-Json
    $obj2 = $jsonstring2 | ConvertFrom-Json

    Compare-Object $obj1 $obj2
}

PS E:\temp> Compare-Json

PS E:\temp> 

是的,那根本就没有输出。

当前的解决方法是将 json 转换为对象,返回字符串,然后拆分字符串,最后比较每个集合
function Compare-Json {
    <# Convert to pretty json, then split to make a string array #>
    $obj1 = $($jsonString1 | ConvertFrom-Json | ConvertTo-Json) -split ([Environment]::NewLine)
    $obj2 = $($jsonstring2 | ConvertFrom-Json | ConvertTo-Json) -split ([Environment]::NewLine)

    Compare-Object $obj1 $obj2
}


PS E:\temp> Compare-Json

InputObject      SideIndicator                                               
-----------      -------------                                               
"GRASS"          =>                                                          
"CUD"            <=                                                          

PS E:\temp> 

有没有更简单的方法来深度比较两个对象?

最佳答案

不知道是不是更好,但是:

$jsonString1 = '{ "baz": "quuz", "cow": [ "moo", "CUD" ], "foo": "bar" }'
$jsonstring2 = '{ "baz": "quuz", "cow": [ "moo", "GRASS" ], "foo": "bar" }'

compare $jsonString1.split(',:[]{}') $jsonString2.split(',:[]{}')


InputObject                                          SideIndicator                                      
-----------                                          -------------                                      
 "GRASS"                                             =>                                                 
 "CUD"                                               <=                                                 

关于json - Powershell:比较对象不比较嵌套对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24790099/

相关文章:

windows - Powershell 为局部变量设置环境变量

ruby - <=> 和 - 在 sort 方法的 block 中有什么区别?

java - 在以下 if - else if - else if 结构的构造中,进行了多少次比较,1 还是 3?

java - 比较两个不同格式的日期对象

json - 如何将 JSON 字符串转换为 BSONDocument

java - 获取没有字符串键的 Json 值 - Java JSONObject

javascript - JSON 数组语法。花括号(对象语法)是否绝对必要?

python - 对 Python 将 JSON 作为字符串而不是文字返回感到困惑

Azure Devops - Azure 资源管理器 (ARM) 服务连接

json - 为什么此字符串不在 PowerShell 中序列化为简单的 JSON 字符串