【问题标题】:Python: import JSON file into SQLAlchemy JSON fieldPython:将 JSON 文件导入 SQLAlchemy JSON 字段
【发布时间】:2020-04-30 20:05:39
【问题描述】:

我对 Python 比较陌生,所以我希望我错过了一些非常明显的东西......但是 StackOverflow 上所有类似的问题/答案对于我正在尝试的简单任务来说似乎真的过于复杂达到。

我有几百个包含 JSON 数据的文本文件(实际的数据结构并不重要,下面的这个块只是为了告诉你我有什么样的东西,数据的实际结构可能会有很大的不同,但它将始终是有效的 JSON 数据)。

{
    "config": {
        "item1": "value1",
        "item2": "value2"
    },
    "data": [
        {
            "dataA1": "valueA1",
            "itemA2": "valueA2"
        },
        {
            "dataB1": "valueB1",
            "itemB2": "valueB2",
            "itemB3": "valueB3"
        }
    ]
}

我的模型是这样的:

class ModelName(db.Model):
    __tablename__ = 'table_name'
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(64))
    data1 = db.Column(db.JSON)
    data2 = db.Column(db.JSON)

我这里有多个数据列,data1data2,这样我就可以对插入的数据进行视觉比较。最终模型将只有一个数据字段。

这是似乎一切都出错的数据插入:

import json

new_record = ModelName(
    name='Foo',
    data1=open('./filename.json').read(),
    data2=json.dumps(open('./filename.json').read(), indent=2)
)
try:
    db.session.add(new_record)
    db.session.commit()
    print('Insert successful')
except:
    print('Insert failed')

data1data2 结尾的数据散布着不同数量的 \ 以转义双引号和换行符,而且它将整个数据插入包装在一组双引号中。结果,数据根本无法使用。所以我目前不得不手动将数据复制并粘贴到数据库中,虽然这项繁琐的任务工作正常,但它远非正确的事情。

我不需要以任何方式编辑、操作或对数据执行任何操作。我只是想从给定文件中读取 JSON 字符串,然后将其内容插入到数据库中的记录中,就是这样,故事结束,仅此而已。

真的没有简单方法可以实现这一点吗?

【问题讨论】:

  • 读取文件时需要json.loads()。并且没有缩进 kwarg。所以改为:data2=json.loads(open('filename.json').read())
  • 谢谢!这正是我需要的!如果你想把它放在一个答案中,我会接受它作为解决方案。非常感谢@mechanical_meat
  • 不客气。答案已添加。祝您编码愉快!

标签: json python-3.x flask-sqlalchemy


【解决方案1】:

当你读入一个文件时,你需要 json.loads()。
并且没有缩进 kwarg。
所以改为:

    data2=json.loads(open('filename.json').read())

【讨论】:

    猜你喜欢
    • 2019-03-16
    • 1970-01-01
    • 2020-08-30
    • 1970-01-01
    • 1970-01-01
    • 2018-11-26
    • 1970-01-01
    • 2021-12-27
    • 2017-01-02
    相关资源
    最近更新 更多