python - 将字典保存到 json 或从 json 加载字典时出现意外输出

标签 python json

Windows 7 上的 Python 2.7.6 我使用的代码:

import json

settings = {
    "vo" : "direct3d",
    "ao" : "dsound",
    "volume" : "100",
    "priority" : "abovenormal"}

json.dump(settings, open('settings.json', 'w'))
settings = json.load(open('settings.json', 'r'))

print settings

在 settings.json 中我得到:

{"volume": "100", "priority": "abovenormal", "ao": "dsound", "vo": "direct3d"}

最后控制台输出:

{u'volume': u'100', u'priority': u'abovenormal', u'ao': u'dsound', u'vo': u'direct3d'}

我做错了什么?

最佳答案

你没有做错什么。 json.load 会将所有内容转换为 unicode,这就是 u 所代表的内容。

这不应影响该字典的使用,例如:

>>> result = {u'volume': u'100', u'priority': u'abovenormal', u'ao': u'dsound',
u'vo': u'direct3d'}
>>> result['volume']
u'100'

如果发现有问题,您可以随时使用 simplejson这不会强制使用 unicode。或者您可以编写一个转换器函数并将其挂接到 json.load - 作为 object_hook 参数的函数。

这是 object_hook-example from the docs :

>>> import json
>>> def as_complex(dct):
...     if '__complex__' in dct:
...         return complex(dct['real'], dct['imag'])
...     return dct
...
>>> json.loads('{"__complex__": true, "real": 1, "imag": 2}',
...     object_hook=as_complex)
(1+2j)
>>> import decimal
>>> json.loads('1.1', parse_float=decimal.Decimal)
Decimal('1.1')

关于python - 将字典保存到 json 或从 json 加载字典时出现意外输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22908654/

相关文章:

python - Django OneToOneField 默认值

python - 迭代 numpy 数组以获取子数组

java - 如何从 json 数组中检索数据并显示在 textview 中?

java - 读取 Json 文件时出现 libGDX And​​roid SerializationException

javascript - 导入 Angular JSON 对象

c# - 我想要哪个 Json 序列化器?

python - flask 应用的结构

python - Cython 和 regex.h

python - 为 pandas to_datetime 函数指定时区

android - Json 可能在 setEntity 附近不使用 HttpPost