将 JSON 导入 Mysql

新手上路,请多包涵

我面临的问题是将 JSON 导入 Mysql。我搜索了互联网,搜索了 stackoverflow,可能还有更多来源,但找不到一个 合适的 解决方案。在这里全面披露——我不是 PHP、SQL,也不是 JSON 专业人士。

我要完成的工作相当简单:将此 JSON 文件 https://developers.facebook.com/tools/explorer/method=GET&path=245226895508982%2Ffeed%3Faccess_token%3D%3Caccess_token%3E= 导入 Mysql 数据库。我知道我需要以某种方式将 JSON 数据分配到列中,然后根据内容相应地管理行。我不需要所有数据,但需要大部分数据。稍后应通过用户的搜索查询回显数据。

我的问题似乎很简单——我该怎么做?

PS:我尝试将其转换为 XML,但我没有足够的权限将 XML 导入 SQL 数据库。转换器也不是最好的工作。

原文由 John 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 523
1 个回答

我遇到了这个问题,因为我试图做同样的事情:将 JSON 对象导入 MYSQL,以便我可以查询它。

也许我已经简化了原始问题(我实际上看不到所需的输入文件),但我的解决方案是将 JSON 数据简单地输入为单个 JSON 对象。然后我就可以使用 MYSQL 命令直接在 MYSQL 中展开 JSON 对象并完成任务。

在 Python 中,我创建了一个端点类:

  1. 接收一个 JSON 对象
  2. 将其“转储”到一个名为 jsonBOM 的变量中
  3. 运行查询以将 JSON 对象插入现有表。

一旦我将它放在 SQL 表中,我就可以使用所有常规 JSON 命令将数据提取到表中。 (我在下面给出了我的端点类以供参考,但每个人创建的端点都不同,我没有包含所有的辅助函数。我只是想展示查询是如何包装在 python 中的)

 class Allocation(Resource):
def post(self):

    response = {}
    items = {}

    try:
        conn = connect()

        allocation_data = request.get_json(force=True)
        jsonBOM = json.dumps(allocation_data)

        new_allocation_uid = get_new_allocationUID(conn)
        today = getNow()

        # Run query to enter JSON object into Allocation table
        addAllocation =  """
            INSERT INTO pmctb.allocation
            SET allocation_uid =  \'""" + new_allocation_uid + """\',
                allocation_date = \'""" + today + """\',
                allocation_json = \'""" + jsonBOM + """\';

            """

        items = execute(addAllocation, "post", conn)
        response['allocation'] = "Successful"
        return response

    except:
        raise BadRequest('Add Part failed')
    finally:
        disconnect(conn)

现在我可以像这样输入 JSON:

 [
{"product_uid":"310-000594", "inv_uid":"870-000016", "assembly":"C", "allocated":3},
{"product_uid":"310-000594", "inv_uid":"870-000016", "assembly":"C", "allocated":2}
]

然后使用这样的查询在 MySQL 中创建一个表(同样,这段代码只是为了表明可以将 JSON 对象制作成一个表):

 JSON_TABLE (p.allocation_json, '$[*]'
    COLUMNS (
            Allocation_id FOR ORDINALITY,
            Allocation_product_uid VARCHAR(255) PATH '$.product_uid',
            Allocation_inventory_uid VARCHAR(255) PATH '$.inv_uid',
            Allocation_assy_name VARCHAR(255) PATH '$.assembly',
            Allocation_allocated_qty INT PATH '$.allocated')
            ) AS BOM

我希望对某人有所帮助!

原文由 Prashant Marathay 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题