比较Windows PowerShell和Python生成的两个JSON对象

2 投票
1 回答
8115 浏览
提问于 2025-04-18 08:49

我正在尝试把 .Net PowerShell 的代码转换成 Python。为了确保 Python 代码是正确的,我在测试 PowerShell 的输出和 Python 的输出是否一致。

在 PowerShell 中,我有

$ps_output = PowerShell-Function $log_path
$python_output = Python-Function $log_path
($ps_output -eq $python_output)

当我运行 compare-object 时,我得到

InputObject                                                                                                 SideIndicator                                                                                              
-----------                                                                                                 -------------                                                                                              
The Python Win32 extensions for NT (service, event logging) appear not to be available.                     =>                                                                                                         
[{'blocks': '5860533168', 'sn': 'PN2234J4T5DR', 'fw': 'MF8OAC0', 'device': 'da1', 'data': ['@{n... =>                                                                                                         
[{"bay":"1","device":"da1","make":"HGST","type":"HUS724030ALA640","fw":"MF8OAC0","sn":"PN2234J4T5DR",... <=  

我比较确定,导致相等性检查失败的原因是,Python 和 PowerShell 中键值对的顺序不同。

所以我在寻找一种方法,可以在 PowerShell 中测试 JSON 对象的相等性,或者找到一种方式,让我在 Python 中生成的 JSON 排序,能够和 PowerShell 的输出一致。

我试过使用 OrderedDict。这带来了两个问题:一是把

[OrderedDict{...

放在字符串前面,二是让代码变得比较脆弱(因为我需要依赖于什么时候往字典里添加东西)。

1 个回答

4

你有没有尝试先用 ConvertFrom-Json 把数据转换成 PowerShell 对象,然后再用 Compare-Object 来比较呢?

$ps_output = PowerShell-Function $log_path
$python_output = Python-Function $log_path
$po_ps_output = $ps_output | ConvertFrom-Json
$po_python_output = $python_output | ConvertFrom-Json
Compare-Object $po_ps_output $po_python_output

撰写回答