私はPythonを使用して2つの複雑なjson文字列を比較しようとしていますが、いくつか問題があります。私が持っている2つの文字列は同じですが、子要素のいくつかのフィールドは異なる順序で表示されます。Pythonでの複雑なjson文字列の比較
EG:
a = """
{
"sgroupname":"windows_securezone",
"ipperms":[
{
"IpProtocol":"-1",
"IpRanges":[
{
"CidrIp":"194.66.78.xx/32"
},
{
"CidrIp":"86.17.73.xx/32"
}
],
"UserIdGroupPairs":[
],
"PrefixListIds":[
]
}
]
}
"""
b = """
{
"sgroupname":"windows_securezone",
"ipperms":[
{
"IpProtocol":"-1",
"IpRanges":[
{
"CidrIp":"86.17.73.xx/32"
},
{
"CidrIp":"194.66.78.xx/32"
}
],
"UserIdGroupPairs":[
],
"PrefixListIds":[
]
}
]
}
"""
異なる順序でipperms要素戻っ下IpRangesリストは、比較を破るように見えるという事実。私はそれらを同じ順序に切り替えると、比較が正しく機能します。
私はOrderedDict、json.dumps 'sort_keys = True'パラメータ、sorted()関数を使用してみましたが、比較する文字列を取得できません。何か案は?
ご協力いただければ幸いです!
'sort_keys'は*' IpRanges'は*リストであるので、お手伝いをするつもりはありません。すでに注文しています。これらを比較したい場合は、最初にオブジェクトに含まれるリストをソートする必要があります。これらのリストのメンバーは本質的にソート可能ではないディクテーションであるため、扱いにくくなります。 – larsks
'json.loads'を使ってPythonのネイティブ型に戻って解析することができない何らかの理由がありますか?また、ラークスは言った。 :-) – ShadowRanger
@ShadowRanger問題はデータが必ずしもこの形式であるとは限りません。時々そこにリストが存在する、他の時ではないので、私はその解決法をどのように実装できるか確信しています... – Ben