将.JSON导入MySQL

时间:2016-06-20 19:28:23

标签: php mysql sql json mysql-workbench

我有一个非常大的(200k +行)和一些复杂的.JSON文件,我需要存储在MySQL中,以便我可以查询它。

这个.JSON分为两个主要部分,“边缘”和“节点”,如下所示是两个例子:

{
    "edges": [
        {
            "source": "279364692",
            "target": "282656527",
            "id": "2959",
            "attributes": {
                "Weight": "1.0"
            },
            "color": "rgb(184,178,213)",
            "size": 1.0
        },
        {
            "source": "279364426",
            "target": "3088727691",
            "id": "2122",
            "attributes": {
                "Weight": "1.0"
            },
            "color": "rgb(182,131,187)",
            "size": 1.0
        },
    ],

"nodes": [
    {
        "x": -1281.15625,
        "y": 173.54820251464844,
        "id": "2705660357",
        "attributes": {},
        "color": "rgb(237,248,251)",
        "size": 10.0
    },
    {
        "x": -269.597900390625,
        "y": 1419.9178466796875,
        "id": "3341801730",
        "attributes": {},
        "color": "rgb(237,248,251)",
        "size": 10.0
    }
]
}

我的整个.JSON文件与此格式完全相同,所有内容都在“边缘”和“节点”下。有几个关于如何导入.JSON文件的教程,我已经尝试了大部分。但我没有找到任何可以像我一样处理数据的东西。

那么,我如何将这些信息存储在MySQL数据库中呢?

3 个答案:

答案 0 :(得分:1)

  

如何将此信息存储在MySQL数据库中?

这个问题导致答案瘫痪。我可以想到十几种不同的方式,具体取决于您想要提取数据的方式,查询是离线还是在线,数据量,服务器端与嵌入式业务逻辑等等。

从根本上说,SQL是声明性的:你告诉它你想要什么数据 out ,引擎会找出最好的方式给你。因此,在面对原始数据的空白时,您的重点是列出数据将回答的问题。以下是一些例子:

  1. 多少条边比N个单位短?这些是什么?按长度订购。
  2. 有多少个顶点在N个单位之内?这些是什么?按边长度成对订购。
  3. 最小边界矩形[x1,y1,x2,y2]中有多少个顶点?这些是什么?有多少连接到MBR外的另一个顶点?
  4. 如果不知道您希望从数据中获得哪种答案,那么任何人 - 甚至是您 - 都无法构建解决方案。

    尽管如此,您可能需要更多地探索一些途径来弄清楚这些问题是什么。以下是一些可行的方法:

    1. 使用每个相应属性的列创建表nodesedgesconnectionsweightsize等。使用命令行像jq这样的工具迭代每个节点"和每个边缘",插入相应的表格。显然,请使用sourcetarget
    2. 进行联接
    3. 与上面类似,但不是每个属性的单个列,而是使用MySQL JSON类型来保存原始JSON。使用MySQL进行查询。

答案 1 :(得分:0)

我以前一直在你的情况。我所学到的并不是很多“一刀切”,特别是对于导入XML / JSON数据。您可能必须创建一个仅供ORM工作的模型类。对于简单的导入任务来说,似乎有很多工作要做。

我建议您创建自己的PHP脚本来读取JSON,迭代元素和节点,然后最终执行参数化查询以将值绑定到SQL插入查询中。

答案 2 :(得分:0)

我不知道你知道任何框架,但你可以使用例如Symfony框架 有一个Bundle可以提供帮助:

http://jmsyst.com/bundles/JMSSerializerBundle

使用名为Doctrine的这个包和库,您可以将任何json(具有关系的事件)反序列化为实体类并保存在数据库中 但是,如果你从未使用过任何一项,那就很难实现它