转储和重新加载的JSON无法匹配原始结构

时间:2016-05-26 09:47:36

标签: python json

MCVE(使用py.test)

import json 
def test_minimum():
            internal={}
            internal[0]=""
            external={}
            with open("source.json", 'w') as outfile:
                    json.dump(internal, outfile)
            with open('source.json', 'r') as f:
                    external = json.load(f)
            assert external == internal

我将json对象保存到磁盘,将其重新加载,并找到它与原始对象不匹配。我怀疑unicode会发生什么事情,但导致错误的是什么,以及处理错误的最佳方式。

错误消息是:

    assert external == internal
E           assert {'0': ''} == {0: ''}
E             Left contains more items:
E             {u'0': u''}
E             Right contains more items:
E             {0: ''}
E             Use -v to get the full diff

1 个答案:

答案 0 :(得分:2)

序列化为json时,Integer和float键会隐式转换为字符串。这个最小的例子澄清了它:

>>> json.dumps({1: 2})
'{"1": 2}'

>>> json.dumps({'1': 2})
'{"1": 2}'

显然,两个不同的Python对象被映射到相同的JSON,因此您无法始终往返它。