泡菜垃圾堆

2024-06-26 04:37:00 发布

您现在位置:Python中文网/ 问答频道 /正文

嗨,我正在使用一个JSON编码器,在哪里泡菜、垃圾()的输出很奇怪。输出如下:

"cdecimal Decimal p0 (S'2097369' p1 tp2 Rp3 .",

而它应该是:2097369

代码片段是:

^{pr2}$

有人能告诉我出什么问题了吗?我怎样才能得到想要的价值?在


Tags: 代码json编码器泡菜垃圾decimal价值p1
1条回答
网友
1楼 · 发布于 2024-06-26 04:37:00

我想这就是你要找的。JSON不支持的类型使用pickle序列化为字符串,并以一种格式存储,以指示它是Python对象。object_hook用于识别该格式,并在^{期间将pickled对象转换回Python对象:

from decimal import Decimal
import json
import pickle

class PythonObjectEncoder(json.JSONEncoder):
    def default(self, obj):
        if isinstance(obj, (dict,list,tuple,str,unicode,int,long,float,bool,type(None))):
            return json.JSONEncoder.default(self,obj)
        return {'_python_object_':pickle.dumps(obj)}

def as_python_object(dct):
    if u'_python_object_' in dct:
        return pickle.loads(dct[u'_python_object_'])
    return dct

obj = {'a':1,'b':'string','c':1.2,'d':Decimal('123.456')}
print obj # original object
j = json.dumps(obj,cls=PythonObjectEncoder,indent=2)
print j  # encoded object
obj = json.loads(j,object_hook=as_python_object)
print obj # decoded object

输出:

^{pr2}$

相关问题 更多 >