我们刚刚升级到Django 1.9并将其移动到内置的JSONfield,我们用它来存储字典.但是,当我尝试从中读取数据时,它会返回字典的unicode.
我的JSONfield定义为:
class SmsInfo(models.Model):
[...]
json = JSONField(default=dict)
Run Code Online (Sandbox Code Playgroud)
数据通过以下方式写入:
params = dict(request.POST)
SmsInfo.objects.create([...], json=params, [...])
Run Code Online (Sandbox Code Playgroud)
稍后会以这种方式阅读:
incoming_smsses = SmsInfo.objects.select_related('game').defer('game__serialized').filter([...])
Run Code Online (Sandbox Code Playgroud)
在这一点上:
print incoming_smsses[0].json.__class__
Run Code Online (Sandbox Code Playgroud)
回报
<type 'unicode'>
Run Code Online (Sandbox Code Playgroud)
而不是我期待的字典,我的代码崩溃,因为它无法查找任何键.
我已经坚持了很多,我无法弄清楚为什么会出错.我现在使用literal_eval作为解决方法,它将unicode变回dict.这暂时有效,但我宁愿在源头解决这个问题!
为什么我的字典在这里转为unicode?
Max*_*e B -2
这里似乎与数据库存储有关。这个 JSONField 仍然充当正确 JSON 格式的验证器。
但是,您可以破解并从返回的 unicode 字符串加载字典。
尝试如下:
import json
data = json.loads(incoming_smsses[0].json)
Run Code Online (Sandbox Code Playgroud)
然后你可以将它作为字典访问(IMO)。
| 归档时间: |
|
| 查看次数: |
2920 次 |
| 最近记录: |