Skip to main content
 首页 » 编程设计

python之jsonpickle 将我的字典键从数字转换为字符串

2025年05月04日58lyhabc

我试图以一种可以在外部形式中读取它们的方式序列化我的对象,并找到了 jsonpickle。但事实证明它将我的字典键从整数转换为字符串。

我注意到了 this thread关于仅使用 JSON 包的问题,​​但我希望 jsonpickle 能够解决该问题。有任何已知的解决方法吗?或者,是否有更好的文本模式序列化格式可用于 Python?

Python 3.4.3 (v3.4.3:9b73f1c3e601, Feb 23 2015, 02:52:03)  
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin 
>>> a={} 
>>> a[11]="eleventy" 
>>> a[22]="twice that" 
>>> a 
{11: 'eleventy', 22: 'twice that'} 
>>> import jsonpickle 
>>> jstring=jsonpickle.encode(a) 
>>> jstring 
'{"22": "twice that", "11": "eleventy"}' 
>>> b=jsonpickle.decode(jstring) 
>>> b 
{'22': 'twice that', '11': 'eleventy'} 
>>>  

更新:短期内,我的工作是拥有并行保存功能——一个用于 pickle,一个用于 jsonpickle。由于我的对象很复杂(循环引用),我无法摆脱无法处理的东西。我最初的要求是要有一种我可以在文本编辑器中阅读的格式,这样我就可以检测到逻辑问题,只要常规的 pickel 是可靠的(它是),现在就可以了。有一天我可能想让其他一些非 Python 软件吃掉这个文件,所以我想找到一个可用的解决方案。 XML 格式? Python 社区似乎对序列化为 XML 不那么感兴趣。至少我还没有找到像 pickle/jsonpickle 那样容易工作的包。

请您参考如下方法:

在 jsonpickle 中,您可以使用 'keys' 参数来保存 key ,而无需将它们强制转换为字符串。

要编码,请执行:

jsonpickle.encode(your_object, keys=True) 

并解码:

jsonpickle.decode(the_encoded_object, keys=True)