为了账号安全,请及时绑定邮箱和手机立即绑定

如何从JSON获得字符串对象而不是Unicode?

如何从JSON获得字符串对象而不是Unicode?

潇潇雨雨 2019-07-11 14:52:53
如何从JSON获得字符串对象而不是Unicode?我在用Python 2来解析JSONASCII编码文本文件。当加载这些文件时json或simplejson,我的所有字符串值都转换为Unicode对象,而不是String对象。问题是,我必须对一些只接受字符串对象的库使用数据。我不能改变图书馆也不更新他们。是否有可能获得字符串对象而不是Unicode对象?例>>> import json>>> original_list = ['a', 'b']>>> json_list = json.dumps(original_list)>>> json_list'["a", "b"]' >>> new_list = json.loads(json_list)>>> new_list[u'a', u'b']  # I want these to be of type `str`, not `unicode`更新有人问了这个问题很久以前当我被困在Python 2..今天,一个简单而干净的解决方案是使用Python的最新版本-即Python 3向前看。
查看完整描述

3 回答

?
MM们

TA贡献1886条经验 获得超2个赞

没有内置选项可以让json模块函数返回字节字符串而不是Unicode字符串。但是,这个简短的递归函数将任何解码的JSON对象从使用Unicode字符串转换为UTF-8编码的字节字符串:

def byteify(input):
    if isinstance(input, dict):
        return {byteify(key): byteify(value)
                for key, value in input.iteritems()}
    elif isinstance(input, list):
        return [byteify(element) for element in input]
    elif isinstance(input, unicode):
        return input.encode('utf-8')
    else:
        return input

只需在从json.loadjson.loads打电话。

几个注意事项:

  • 若要支持Python2.6或更高版本,请替换

    return {byteify(key): byteify(value) for key, value in input.iteritems()}

    带着

    return dict([(byteify(key), byteify(value)) for key, value in input.iteritems()])

    ,因为字典理解直到Python2.7才被支持。
  • 由于这个答案在整个解码对象中反复出现,它具有一些不受欢迎的性能特征,可以通过非常小心地使用

    object_hook

    object_pairs_hook

    参数。

    Mirec Miskuf的答复

    到目前为止,是唯一一个能够正确完成这一任务的人,尽管结果是,它比我的方法要复杂得多。


查看完整回答
反对 回复 2019-07-11
  • 3 回答
  • 0 关注
  • 879 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信