【问题标题】:Django: How to populate database from JSONDjango:如何从 JSON 填充数据库
【发布时间】:2016-01-01 12:01:37
【问题描述】:

我想用这个 JSON 填充我模型的数据库:

 {
    "pk": 1,
    "model": "companies.Company",
        "name": "Google",
        "site": "google.com"
    }
}{
    "pk": 2,
    "model": "companies.Company",
    "fields": {
        "name": "Zoho",
        "site": "zoho.com",
    }
}{
    "pk": 3,
    "model": "companies.Company",
    "fields": {
        "name": "Digg",
        "site": "digg.com",
    }
}{

我已经像documentation 描述的那样制作了我的 JSON,但我不确定从这里开始做什么!

如果有人知道我必须从这里做什么,我希望能得到一些帮助!很高兴回答有关此的任何问题!

编辑:

我被告知要跑

./manage.py loaddata companies.json

当我运行时,我得到了:

' django.core.serializers.base.DeserializationError: 问题 安装夹具“PATH_TO_FILE/companies/fixtures/companies.json”: 额外数据:第 21 行第 2 列 - 第 5586860 行第 6 列(字符 909 - 249730297)'

"line 21 column 2 - line 5586860 column 6 (char 909 -249730297)" 是文件中的最后一个字符。我还尝试删除模型的一个完整条目(以消除可能最后一个条目被搞砸的情况),但我再次遇到相同的错误,错误再次引用文件中的最后一个字符。

编辑 2

第 20 行和第 21 行只是第一个条目结束和第二个条目开始的地方(第 20 行是上例所示示例中的最后一行):

第 20 行:“}”

第 21 行:“}{”

附:之所以是第 20 行和第 21 行,是因为实际上有更多的字段;名称和站点,即问题中显示的那个。

【问题讨论】:

  • 表示问题从第 21 行开始,请显示第 20 行和第 21 行。
  • @DanielRoseman 我已将它们添加到问题中!
  • 我建议通过 json-parser 运行你的 json(在 Linux 下,我想我有 jsonp)。看起来您的 json 格式不正确。 (字段部分的最后一行不应该有尾随逗号,第 21 行可能应该是 },{ (并且可能进一步重新格式化)等等。

标签: python json django python-2.7 django-models


【解决方案1】:

这不是有效的 JSON;您不能在紧跟大括号之后紧跟大括号。您需要在它们之间使用逗号,但为了使其有效,您需要将整个文件包含在 [...] 中。

【讨论】:

    【解决方案2】:

    在您的“公司/固定装置”目录中使用该文件,您应该只需要运行

    ./manage.py loaddata your-fixture-filename.json
    

    并从您的示例中修复了 JSON:

    [
        {
            "pk": 1,
            "model": "companies.Company",
            "fields": {
                "name": "Google",
                "site": "google.com"
            }
        },
        {
            "pk": 2,
            "model": "companies.Company",
            "fields": {
                "name": "Zoho",
                "site": "zoho.com"
            }
        },
        {
            "pk": 3,
            "model": "companies.Company",
            "fields": {
                "name": "Digg",
                "site": "digg.com"
            }
        }
    ]
    

    【讨论】:

    • 我已对有关您的回答的问题进行了编辑!
    • 你能把你的整个 JSON 文件也包括进来吗?
    • 我的 JSON 文件超过 5M 行!
    • 您能否至少包含前几条记录,以及所有字段?如果没有更多信息,请尝试在第 21 行添加一个逗号,这样“}{”就变成了“},{”
    • 我加了几个例子!
    猜你喜欢
    • 2015-04-26
    • 2019-01-17
    • 2010-12-25
    • 2011-08-29
    • 2019-07-09
    • 2019-09-16
    • 1970-01-01
    • 1970-01-01
    • 2021-02-01
    相关资源
    最近更新 更多