python的json模块,针对decimal类型直接dumps报错
博客专区 > testwork 的博客 > 博客详情
python的json模块,针对decimal类型直接dumps报错
testwork 发表于2年前
python的json模块,针对decimal类型直接dumps报错
  • 发表于 2年前
  • 阅读 71
  • 收藏 2
  • 点赞 1
  • 评论 0

新睿云服务器60天免费使用,快来体验!>>>   

主要涉及的代码

def _iterencode(o, _current_indent_level):
    if isinstance(o, basestring):
        yield _encoder(o)
    elif o is None:
        yield 'null'
    elif o is True:
        yield 'true'
    elif o is False:
        yield 'false'
    elif isinstance(o, (int, long)):
        yield str(o)
    elif isinstance(o, float):
        yield _floatstr(o)
    elif isinstance(o, decimal):
        #support decimal type
        yield str(float(o))
    elif isinstance(o, (list, tuple)):
        for chunk in _iterencode_list(o, _current_indent_level):
            yield chunk
    elif isinstance(o, dict):
        for chunk in _iterencode_dict(o, _current_indent_level):
            yield chunk
    else:
        if markers is not None:
            markerid = id(o)
            if markerid in markers:
                raise ValueError("Circular reference detected")
            markers[markerid] = o
        o = _default(o)
        for chunk in _iterencode(o, _current_indent_level):
            yield chunk
        if markers is not None:
            del markers[markerid]

return _iterencode


但是必须要强制走 py的函数,默认是走_json.c封装的模块

或者使用python-cjson替换python带的默认json模块

单独修改 c 源代码. 

增加对decimal类型的直接 dumps 

不然,需要对所有decimal类型进行float转换.

import decimal

import json 

obj['abc']=decimal.Decimal(100.00012)

josn.dumps(obj) 

代码会提示错误. 

需要针对 类型转换为 float 才能json转码. 

...

  • 打赏
  • 点赞
  • 收藏
  • 分享
共有 人打赏支持
粉丝 4
博文 57
码字总数 19239
×
testwork
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: