我在文本文件中有一个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
答案 0 :(得分:11)
有些评论建议将其保留为JSON格式并将其存储在文本列中。
我建议如果您可以控制架构,则应将其存储在两个NUMERIC
字段中 - 一个用于纬度,一个用于经度。从根本上说,这就是你拥有的数据。您使用JSON作为容器格式接收它的事实与数据本身无关。
如果您将其存储为纬度和经度,则查询它更简单,如果您愿意,您仍然可以稍后重新创建JSON ...但如果您最终想要获取它不< / em>作为JSON,你将处于更好的位置。这也意味着你不会将自己与JSON联系起来以应对未来的变化。
就我个人而言,我认为精神上将数据的内在本质与您收到数据的方式区分开来总是一个好主意。以适合该存储的任何格式存储数据 - 因此,如果要存储数字,请使用其中一种数字数据类型。如果您要存储日期和时间,请使用datetime
等。这样,每次您想要访问它时,您最终都不会在数据本身之间添加额外的图层。
这种方法也意味着你更有可能在早期发现不良数据 - 如果你只是直接存储JSON而不先解析它,你可以稍后发现纬度或经度不是'有效数字。哎呀,你的样本数据有时候有lon
,有时候有lng
的事实表明你应该做一些数据清理。
答案 1 :(得分:3)
尝试使用https://sqlizer.io 它可以轻松地将您的json转换为SQL文件。
对于最多5,000行的文件,SQLizer是免费的,然后支付(10美元)。
答案 2 :(得分:1)
答案 3 :(得分:0)
如果您使用Java进行应用程序,则可以执行以下操作。
将JSONObject转换为String并另存为TEXT / VARCHAR。检索同一列时,将String转换为JSONObject。
例如
写入数据库
String stringToBeInserted = jsonObject.toString();
//and insert this string into DB
从DB读取
String json = Read_column_value_logic_here
JSONObject jsonObject = new JSONObject(json);
答案 4 :(得分:0)
基本上,如果这是一个对您的软件很重要的数据(如果有涉及这些数据的查询),您应该考虑解析JSON。
如果不是:按原样保存!
答案 5 :(得分:0)
从Mysql 5.7.10及更高版本的JSON支持是原生的,因此您可以拥有JSON数据类型
文档验证 - 只有有效的JSON文档才能存储在 JSON列,因此您可以自动验证数据。
高效访问 - 更重要的是,当您将JSON文档存储在JSON列中时,它不会存储为纯文本值。而是存储它 采用优化的二进制格式,可以更快地访问对象 成员和数组元素。
效果 - 改进您的查询 通过在JSON列中的值上创建索引来提高性能。 这可以通过虚拟列上的“功能索引”来实现。
便利性 - JSON列的其他内联语法使其成为可能 在SQL中集成Document查询非常自然。对于 示例(features.feature是JSON列):
SELECT feature->"$.properties.STREET" AS property_street FROM features WHERE id = 121254;