json - 强制 Python json 模块使用 ASCII

标签 json unicode ascii python-2.x

我正在使用 json.dump() 和 json.load() 将字符串字典保存到磁盘/从磁盘读取。问题是我不能在 unicode 中有任何字符串。无论我如何将参数设置为转储/加载(包括 ensure_ascii 和编码),它们似乎都是 unicode。

最佳答案

如果你只是处理简单的 JSON 对象,你可以使用以下:

def ascii_encode_dict(data):
    ascii_encode = lambda x: x.encode('ascii')
    return dict(map(ascii_encode, pair) for pair in data.items())

json.loads(json_data, object_hook=ascii_encode_dict)

这是一个如何工作的例子:

>>> json_data = '{"foo": "bar", "bar": "baz"}'
>>> json.loads(json_data)                                # old call gives unicode
{u'foo': u'bar', u'bar': u'baz'}
>>> json.loads(json_data, object_hook=ascii_encode_dict) # new call gives str
{'foo': 'bar', 'bar': 'baz'}

This answer适用于更复杂的 JSON 结构,并对 object_hook 参数给出了一些很好的解释。还有另一个答案,它递归地获取 json.loads() 调用的结果并将所有 Unicode 字符串转换为字节字符串。

关于json - 强制 Python json 模块使用 ASCII,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9590382/

相关文章:

python - 在 UnicodeError 上显示字符串

javascript - 解析嵌套 json 的语法

python - 是否可以在 CLI 中修改 json 对象?

unicode - 使用 CFile::typeUnicode

Delphi < 2009,JvAppStorage 的 unicode 替代品

Python编码/解码问题

java - java中如何将大整数转换为Ascii字符串?

linux - 将所有非 ascii 字符更改为 ascii Bash 脚本

java - Struts2 REST 插件 : Passing array in JSON

c# - JSON 到契约(Contract)或类?