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

Java 将JSON数据插入MYSQL的最佳方法,java,mysql,json,Java,Mysql,Json,我有一个包含纬度和经度对的文本文件中的JSON数据,现在我想将这些数据存储到MYSQL数据库中,如何进行&请建议最好的方法 这是我的JSON数据 [{"latlon":{"lng":77.75124312,"lat":12.97123123},"type":"s"}, {"latlon":{"lon":77.73004942455374,"lat":12.98227579706589},"type":"s"}, {"latlon":{"lon":77.67374449291539,"lat

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

这是我的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格式,并将其存储在文本列中

我建议,如果您可以控制模式,那么应该将其存储在两个
数值
字段中—一个用于纬度,另一个用于经度。基本上,这就是你拥有的数据。您使用JSON作为容器格式接收数据的事实与数据本身无关

如果您将其存储为纬度和经度,则在其上进行查询会更简单,并且如果您希望。。。但是,如果您最终希望获取它而不是JSON,那么您将处于更好的位置。这也意味着您没有将自己绑定到JSON,以防将来的更改

就我个人而言,我认为在精神上把数据的本质与你接收数据的方式分开总是一个好主意。将数据存储为该存储的惯用格式—因此,如果要存储数字,请使用其中一种数字数据类型。如果要存储日期和时间,请使用
datetime
等。这样,您就不会在每次访问数据时都与数据本身之间有一个额外的层

这种方法还意味着您更可能在早期发现错误数据——如果您只是直接存储JSON而不首先对其进行解析,那么稍后您可能会发现纬度或经度不是有效的数字。见鬼,您的示例数据有时具有
lon
,有时具有
lng
,这一事实表明您无论如何都应该进行一些数据清理。

这可能会帮助您:-

检查以下站点,将您的josn数据文件转换为sql插入脚本:


如果您使用Java作为应用程序,您可以这样做

将JSONObject转换为字符串并另存为TEXT/VARCHAR。检索同一列时,将字符串转换为JSONObject

比如说

写入数据库

String stringToBeInserted = jsonObject.toString();
//and insert this string into DB
从数据库读取

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

Ref:

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


如果不是:按原样储存

Mysql 5.7.10和更高版本的JSON支持是本机的,因此您可以使用JSON数据类型

文档验证-只有有效的JSON文档才能存储在 JSON列,因此可以自动验证数据

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

性能-改进您的查询 通过对JSON列中的值创建索引来提高性能。 这可以通过虚拟列上的“功能索引”实现

方便性-JSON列的附加内联语法使其 在SQL中集成文档查询非常自然。对于 示例(features.feature是一个JSON列):
选择feature->“$.properties.STREET”作为features中的property\u STREET,其中id=121254


在表中创建clob列并将其存储。您可以将其存储在文本列中。如果您需要基于这些数据进行搜索,sphinx有一些非常好的函数来解析和搜索JSON数据。我使用的是JAVA,请建议如果您使用文本或blob,您将失去mysql的关系功能。更好地解析JSON并将数据插入表字段中。请注意,mysql 5.7本机将支持JSON作为一种新型列,具有新的函数
JSN.*
和新的索引方式,将nosql在巨大读取负载下的性能优势与搜索和操作较小数据块的关系优势结合起来。好,然后我必须解析它并逐个存储-one@Rakesh:是的,我会的。实际上,我可能会创建一个类来存储纬度和经度对,并将这两个方面分开:将JSON解析为对象,并将结果存储到数据库中。这样,您就可以分别测试每个部分,而不是将两种完全不同的存储/传输格式捆绑在一起。好的,谢谢,我得到了逻辑,但是如果我以后不使用这一对,那么我们可以将其作为JSON插入吗object@Rakesh:如果我以后不再使用这双鞋,你是什么意思?如果你不打算使用这些数据,为什么还要存储它们呢?如果您打算稍后阅读,为什么每次阅读时都要强制所有潜在读者解析JSON,而不是以自然的数字形式使用它呢?对不起,我之前的问题搞错了。非常感谢您的宝贵支持。我需要一些必要的建议。那个链接的标题有误导性。这不是一个好主意script@Mordechai将链接副本修改为更准确