0

我最近加入了一家公司,该公司正在使用 django 构建他们的产品。我目前负责其中一个应用程序,该应用程序在我来这里之前已经开发了一点。

应用程序中的一个实体具有一个 json 字典属性,该属性已作为文本字段保存在数据库中。此外,此属性在模型中标记为文本字段。因此,您可以想象它没有得到正确处理。

我想更改它并使用https://github.com/bradjasper/django-jsonfield将其设置为 json 字段,效果非常好。

但是,我遇到了一个特殊的问题。存储在数据库中的先前数据未正确处理,并且由于它是 unicode 数据,因此数据库中的文本字段如下所示:

{u'key': u'value'}

现在,当实体管理器尝试使用 json 字段加载这些值时,它当然会中断,因为它不再是有效的 json 字符串。

我已经对如何克服这个问题进行了一些研究,但一无所获。

我的问题:

你对如何克服这个有什么建议吗?它可以是任何类型的解决方案。

  • 我可以在晚上运行一些东西来更改该字段以将其转换为有效的 json 字符串。
  • 对 json-field 代码进行了一些更改,使其能够正确处理这些值。

附加信息

我们使用postgreswithpsycopg2作为 django 的数据库后端。

非常感谢你。

4

1 回答 1

2

您可能只需要遍历整个表,加载字段,将其转换为真正的 Python 字典,然后使用json.dumps. ast.literal_eval是转换阶段的不错选择,因为它的工作方式与内置类似,eval但受到更多限制,因此对您的系统风险较小。

for obj in MyModel.objects.all():
    value = ast.literal_eval(obj.dict_value)
    obj.dict_value = json.dumps(value)
    value.save()
于 2012-06-07T08:40:36.940 回答