比较Windows PowerShell和Python生成的两个JSON对象
我正在尝试把 .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