将JSON数据插入MYSQL的最佳方法

我在一个包含纬度和经度对的文本文件中有一个JSON数据,现在我想将这些数据存储到MYSQL DB中,如何进行以及最好的方法请建议。

这是我的JSON数据

[{"latlon":{"lng":77.75124312,"lat":12.97123123},"type":"s"}, {"latlon":{"lon":77.73004942455374,"lat":12.98227579706589},"type":"s"}, {"latlon":{"lon":77.67374449291539,"lat":12.995490063545521},"type":"v"}, {"latlon":{"lon":77.6097147993144,"lat":12.970900929013666},"type":"s"}, {"latlon":{"lon":77.53933363476645,"lat":12.948316929346504},"type":"s"}, {"latlon":{"lng":77.48213123,"lat":12.91213213},"type":"s"} . . . . ] The String may go up to 50 points 

一些评论建议将其保留为JSON格式并将其存储在文本列中。

我建议如果您可以控制架构,则应将其存储在两个NUMERIC字段中 – 一个用于纬度,一个用于经度。 从根本上说,这就是你拥有的数据。 您使用JSON作为容器格式接收它的事实与数据本身无关。

如果你把它存储为纬度和经度,那么查询它就更简单了,如果你想要的话,你仍然可以在以后重新创建JSON ……但是如果你最终想要获取它而不是 JSON,那么你将会是在更好的位置这样做。 这也意味着你不会将自己与JSON联系起来以应对未来的变化。

就个人而言,我认为精神上将数据的内在本质与您收到数据的方式区分开来总是一个好主意。 以适合该存储的任何格式存储数据 – 因此,如果要存储数字,请使用其中一种数字数据类型。 如果您要存储日期和时间,请使用datetime时间等。这样,每次要访问它时,您最终都不会在数据本身之间添加额外的图层。

这种方法也意味着您更有可能在早期发现不良数据 – 如果您只是直接存储JSON而不首先解析它,您可以稍后发现纬度或经度不是有效数字。 哎呀,你的样本数据有时候有lon ,有时候有lng的事实表明你应该做一些数据清理。

尝试使用https://sqlizer.io它可以轻松地将您的json转换为SQL文件。

对于最多5,000行的文件,SQLizer是免费的,然后支付(10美元)。

这可能对您有所帮助: –

查看以下网站,将您的josn数据文件转换为sql insert脚本:

在线JSON到SQL数据转换工具

如果您使用Java进行应用程序,则可以执行以下操作。

将JSONObject转换为String并保存为TEXT / VARCHAR。 检索同一列时,将String转换为JSONObject。

例如

写入DB

 String stringToBeInserted = jsonObject.toString(); //and insert this string into DB 

从DB读取

 String json = Read_column_value_logic_here JSONObject jsonObject = new JSONObject(json); 

参考: 如何在SQLite数据库中存储JSON对象

基本上,如果这是一个对您的软件很重要的数据(如果有涉及这些数据的查询),您应该考虑解析JSON。

如果不是:按原样存储!

从Mysql 5.7.10和更高版本开始,JSON支持是原生的,因此您可以拥有JSON数据类型

文档validation – 只有有效的JSON文档可以存储在JSON列中,因此您可以自动validation数据。

高效访问 – 更重要的是,当您将JSON文档存储在JSON列中时,它不会存储为纯文本值。 相反,它以优化的二进制格式存储,允许更快地访问对象成员和数组元素。

性能 – 通过在JSON列中的值上创建索引来提高查询性能。 这可以通过虚拟列上的“function索引”来实现。

方便性 – JSON列的附加内联语法使得在SQL中集成Document查询非常自然。 例如(features.feature是JSON列): SELECT feature->"$.properties.STREET" AS property_street FROM features WHERE id = 121254;