【问题标题】:Data loss due to json stringifying dict keys由于 json 字符串化 dict 键导致的数据丢失
【发布时间】:2014-11-17 21:44:08
【问题描述】:

考虑下面的例子

>>> import json
>>> d = {0: 'potato', '0': 'spud'}
>>> json.dumps(d)
'{"0": "potato", "0": "spud"}'
>>> json.loads(json.dumps(d))
{'0': 'spud'}

我希望这会引发异常。在文档中有一些关于反序列化器的object_pairs_hook kwarg,但最好在序列化器早期失败并且首先不生成“奇怪的json”输出。

json 内置函数中有什么可以帮助我,或者有什么替代品对字典更加谨慎吗?如果可能,我宁愿不必扩展 JSONEncoder 并预先检查每个 dict 键。

【问题讨论】:

标签: python json


【解决方案1】:

实际上,如果您继续使用 Python 的 json 模块,就没有出路(正如您所说,您不希望对密钥进行任何预检查或自定义)。但是如果事情要留在 Python 中,你可以试试demjson 库,因为它似乎以某种方式处理整数\字符串问题。不过我自己没试过。

【讨论】:

  • 它有效。 demjson.encode(d, strict=True) 引发 demjson.JSONEncodeError: ('object properties (dictionary keys) must be strings in strict JSON', 0)strict=False 你得到 u'{0:"potato","0":"spud"}' 输出。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-09-15
  • 2013-04-22
  • 1970-01-01
  • 2011-08-31
  • 2016-02-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多