项目代码已上传至Github,已开源,欢迎Star。
项目地址:JSON_EXTRACT_SQL
正如大家标题所见的,我造了一个“轮子”!!!
至于是什么需求呢?下面我贴出一段json
:
{
"type": "test",
"properties": {
"id": "sdxzcg",
"type": "polyline",
"styleType": "polyline",
"style": {
"color": "#ffff00",
"width": 3,
"clampToGround": true,
"materialType": "Color"
}
},
"geometry": {
"type": "Mytest",
"coordinates": [
[
105.655425,
37.433664,
1162.4
],
[
105.655627,
37.433482,
1162.8
],
[
105.655789,
37.433317,
1163
],
[
105.655829,
37.432957,
1162
],
[
105.655856,
37.432303,
1162.3
],
[
105.655875,
37.431726,
1165.3
],
[
105.65565,
37.431341,
1166.4
],
[
105.654665,
37.429694,
1163.1
],
[
105.653992,
37.428462,
1180.9
],
[
105.653546,
37.427658,
1188.6
],
[
105.652917,
37.423421,
1192.3
],
[
105.652501,
37.420775,
1201.1
],
[
105.652439,
37.420558,
1201.5
],
// 此处省略上千条数据。。。。
]
}
},
不知道大家看到这段json
代码的时候是什么感受,我反正是头晕眼花。到这里:那需求是什么呢????
需求:将这所有数组里边的三个数值都提取出来,写成SQL语句,插入数据库中。
当时拿到这个任务的时候,第一个想到办法的就是去网上搜现成的在线JSON网站。因为以前都是用这类网站来查看一些结构化的JSON数据,这次也就想在这些网站上面看看是否有满足我这个需求的功能。
绕了了一大圈下来,发现都没有。。。。。有的无疑也就是一些根据JSON生成建表语句的一些功能,就像下边这种👇
找了小时一无所获之后,我想着使用JAVA去解析一下这个,根据现有的工具类像Gson
、FastJson
这些去处理一下,毕竟让我手动改…那是不可能的,咱好歹也是一个程序员啊!!!
最终为了尽快完成任务,我就根据给定的这个json结构,写了他对应的的这个解析代码,最终,很快啊,,就完成了整个任务。但很快下午又有了一个任务,猜猜是啥。。。没错啊,还是提取Json,也是上千条,还是量大管饱。
这时可能大家都会想到复用原来的解析代码,我和大家一样,何尝不是呢!!但这次需要的是UPDATE
,并且要在更新的字段后面加上一个新增标识。尽管最终也是完成了任务,但下班后我也是认真思考了这个问题,要是后面有此类的任务需求,我还得根据具体的JSON结构来写不同的解析代码吗?我能否做到一个通用的,可以从JSON代码中提取出我们需要的INSERT
或者UPDATE
语句的工具呢,,,功夫不负有心人啊!!最终我做出了一个小工具JSON_EXTRACT_SQL,它可以很快的提取出我们需要的值,目前支持INSERT
和UPDATE
语句生成。
演示如下:
其他的一些细节功能的演示,这里不再演示,已将项目开源上传至Github,有什么问题可以提issue,或者私信我都可以
下边给出README.md文档内容:
功能
JSON提取数据生成INSERT语句
- 示例:
{
"employees": [
{
"firstName": "Bill",
"lastName": "Gates"
},
{
"firstName": "George",
"lastName": "Bush"
},
{
"firstName": "Thomas",
"lastName": "Carter"
}
]
}
[
"INSERT INTO tableName(firstName, lastName) VALUES(Bill,Gates);",
"INSERT INTO tableName(firstName, lastName) VALUES(George,Bush);",
"INSERT INTO tableName(firstName, lastName) VALUES(Thomas,Carter);"
]
JSON提取数据生成UPDATE语句
- 示例:
{
"employees": [
{
"firstName": "Bill",
"lastName": "Gates"
},
{
"firstName": "George",
"lastName": "Bush"
},
{
"firstName": "Thomas",
"lastName": "Carter"
}
]
}
[
"UPDATE tableName SET firstName = Bill, lastName = Gates WHERE`name`='张三' ;",
"UPDATE tableName SET firstName = George, lastName = Bush WHERE`name`='张三' ;",
"UPDATE tableName SET firstName = Thomas, lastName = Carter WHERE`name`='张三' ;"
]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
参数列表:
- 表名称(必填):生成SQL语句的表名称
- key(必选):获取该key下的所有k-v
- removeKeys(可选):剔除对象key下不需要的k-v
- type(必选):SQL语句的类型(INSERT、UPDATE)
- 新增字段:
- UPDATE:可以自定义语句,就是直接将语句拼接到生成的SQL语句后边
- INSERT:格式必须是
x=1,y=2
这种形式- attrList:
- 可以替换key的值
- 当获取的数据没有key的时候,必须指定(如下:)
{
"coordinates": [
106.049833,
36.381263,
1518.7
]
}
//这种情况必须指定attrList
其他的一些说明:
-
尽量保证提取对象每个结构都一致,以下是一些错误的示例。
-
出现字段名不统一的情况的时候,都是以第一个对象中的字段名为准。
-
同样的这种情况,也是以第一个对象字段数量为准
-
当需要提取的多个相同的key,结构不一致的时候,会以第一个为准,但此时数据对应也会出问题
-
其余待补充。。。
-
目前只提供了生成INSERT语句和UPDATE语句两种功能,使用的需要注意:
-
生成INSERT语句,新增字段格式必须是(x=1),多个新增字段必须使用
,
分隔。否则会报错: -
生成UPDATE语句,可以自定义填写一些内容(结果最终是以拼接的方式返回);不会解析(x=1)这种格式。
-
-
可以使用replaceList来替换已有的字段。
- 不管ReplaceList中有多少个替换字段,都只会替换和原有字段数量相同的前几个
- 替换的是,去除removeKeys之后的字段数量,如下:
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
如果文章中有描述不准确或者错误的地方,还望指正。您可以留言📫或者私信我。🙏
最后希望大家多多 关注+点赞+收藏^_^,你们的鼓励是我不断前进的动力!!!
感谢感谢~~~🙏🙏🙏</f