为了应付枯燥的工作需求,我造了一个“轮子”

news2024/11/15 13:31:19

项目代码已上传至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去解析一下这个,根据现有的工具类像GsonFastJson这些去处理一下,毕竟让我手动改…那是不可能的,咱好歹也是一个程序员啊!!!

  最终为了尽快完成任务,我就根据给定的这个json结构,写了他对应的的这个解析代码,最终,很快啊,,就完成了整个任务。但很快下午又有了一个任务,猜猜是啥。。。没错啊,还是提取Json,也是上千条,还是量大管饱。
  这时可能大家都会想到复用原来的解析代码,我和大家一样,何尝不是呢!!但这次需要的是UPDATE,并且要在更新的字段后面加上一个新增标识。尽管最终也是完成了任务,但下班后我也是认真思考了这个问题,要是后面有此类的任务需求,我还得根据具体的JSON结构来写不同的解析代码吗?我能否做到一个通用的,可以从JSON代码中提取出我们需要的INSERT或者UPDATE语句的工具呢,,,功夫不负有心人啊!!最终我做出了一个小工具JSON_EXTRACT_SQL,它可以很快的提取出我们需要的值,目前支持INSERTUPDATE语句生成。

演示如下:

在这里插入图片描述

其他的一些细节功能的演示,这里不再演示,已将项目开源上传至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`='张三' ;"
]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JQwOQ6Cw-1691072614519)(image/img_7.png)]

参数列表:

  1. 表名称(必填):生成SQL语句的表名称
  2. key(必选):获取该key下的所有k-v
  3. removeKeys(可选):剔除对象key下不需要的k-v
  4. type(必选):SQL语句的类型(INSERT、UPDATE)
  5. 新增字段:
    • UPDATE:可以自定义语句,就是直接将语句拼接到生成的SQL语句后边
    • INSERT:格式必须是x=1,y=2这种形式
  6. attrList:
    • 可以替换key的值
    • 当获取的数据没有key的时候,必须指定(如下:)
{
  "coordinates": [
    106.049833,
    36.381263,
    1518.7
  ]
}
//这种情况必须指定attrList

其他的一些说明:

  1. 尽量保证提取对象每个结构都一致,以下是一些错误的示例。

    • 在这里插入图片描述

    • 出现字段名不统一的情况的时候,都是以第一个对象中的字段名为准。

    • 在这里插入图片描述

    • 同样的这种情况,也是以第一个对象字段数量为准

    • 在这里插入图片描述

    • 当需要提取的多个相同的key,结构不一致的时候,会以第一个为准,但此时数据对应也会出问题

    • 其余待补充。。。

  2. 目前只提供了生成INSERT语句和UPDATE语句两种功能,使用的需要注意:

    • 生成INSERT语句,新增字段格式必须是(x=1),多个新增字段必须使用,分隔。否则会报错:在这里插入图片描述

    • 生成UPDATE语句,可以自定义填写一些内容(结果最终是以拼接的方式返回);不会解析(x=1)这种格式。

  3. 可以使用replaceList来替换已有的字段。在这里插入图片描述

    • 不管ReplaceList中有多少个替换字段,都只会替换和原有字段数量相同的前几个
    • 替换的是,去除removeKeys之后的字段数量,如下:
    • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传在这里插入图片描述

如果文章中有描述不准确或者错误的地方,还望指正。您可以留言📫或者私信我。🙏
最后希望大家多多 关注+点赞+收藏^_^,你们的鼓励是我不断前进的动力!!!
感谢感谢~~~🙏🙏🙏</f

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/832576.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

小程序商品如何开启秒杀?

在小程序中&#xff0c;开启秒杀活动可以有效地吸引用户的注意力&#xff0c;提升销售额。下面就让我们来看看小程序商品怎么开启秒杀功能吧。 首先&#xff0c;确定秒杀活动的商品。一般来说&#xff0c;我们可以选择一些库存较多的商品或者是需要清理库存的商品作为秒杀商品…

第四次作业 运维高级 安装tomcat8和部署jpress应用

1. 简述静态网页和动态网页的区别。 静态网页 静态网页是指存放在服务器文件系统中实实在在的HTML文件。当用户在浏览器中输入页面的URL&#xff0c;然后回车&#xff0c;浏览器就会将对应的html文件下载、渲染并呈现在窗口中。早期的网站通常都是由静态页面制作的。 静态网页…

Vue2 第十八节 插槽

1.默认插槽 2.具名插槽 3.作用域插槽 插槽 ① 作用&#xff1a;让父组件可以向子组件指定位置插入html结构&#xff0c;也是一种组件间通信的方式&#xff0c;适用于父组件和子组件间通信 ② 分类&#xff1a;默认插槽&#xff0c;具名插槽&#xff0c;作用域插槽 一.默认…

面试必问,敲重点!讲一下 Android Application 启动流程及其源码?

一、写在前面 在开始之前&#xff0c;你需要知道下面几点&#xff1a; 有一份编译好的 Android 源码&#xff0c;现在的 AS 基本能满足&#xff0c;动手跟着步骤走&#xff0c;理解更深刻对 Binder 机制有一定的了解本文基于 API 26&#xff0c;用什么版本的源码并不重要&#…

【蓝图】p46角色上下车功能

这里写目录标题 p46角色上下车功能上车&#xff08;控制权切换&#xff09;让角色和汽车一起移动GetWorldTransform&#xff08;获取场景变换&#xff09;break&#xff08;拆分变换&#xff09;AttachActorToComponent&#xff08;附加Actor到组件&#xff09; 下车 p46角色上…

基于LNMP架构搭建Discuz论坛

LNMP: L---->linux系统&#xff0c;操作系统。 N----->nginx网站服务&#xff08;前端),提供前端的静态页面服务。同时具有代理、转发的作用。&#xff08;转发就是转发后端请求&#xff0c;转发PHP&#xff09;&#xff0c;nginx没有处理动态资源的功能&#xff0c;他有…

SnippetsLab for Mac(代码片段管理工具)

SnippetsLab for Mac特别版使用嵌套文件夹&#xff0c;标签和智能组支持在一个地方管理所有的代码片段&#xff0c;使工作变得简单。您可以按日期&#xff0c;标题等对代码段进行排序。 SnippetsLab for Mac可以帮助您收集和组织有价值的代码片段&#xff0c;并确保您可以随时…

20230803激活手机realme GT Neo3

20230803激活手机realme GT Neo3 缘起&#xff1a; 新买的手机&#xff1a;realme GT Neo3 需要确认&#xff1a; 1、4K录像&#xff0c;时间不限制。 【以前的很多手机都是限制8/10/12/16分钟】 2、通话自动录音 3、定时开关机。 4、GPS记录轨迹不要拉直线&#xff1a;户外助…

什么是高级持续威胁(APT)攻击

目录 前言什么是高级持续威胁高级持续威胁攻击有哪些独特特征APT攻击的五个阶段APT检测及防护措施总结 前言 APT攻击是利用多个阶段和不同攻击技术的复合网络攻击。APT不是一时兴起2构思或实施的攻击。相反&#xff0c;攻击者故意针对特定目标定制攻击策略。并在较长时间内进行…

openCV C++环境配置

文章目录 一、openCV 安装二、新建项目三、配置环境变量四、测试使用 编译器:vs2017 OpenCV:4.5.4 一、openCV 安装 将openCV安装到一个路径下&#xff0c;我安装到了D盘根目录下 二、新建项目 在vs2017新建控制台空项目&#xff0c;打开项目属性 在VC目录 -> 包含目录下…

艺术二维码 API 申请及使用

艺术二维码是一种创新的技术产品&#xff0c;它将二维码与美观的背景图像相结合&#xff0c;创造出既实用又美观的作品。它们不仅具有传统二维码的功能性&#xff0c;能被智能设备快速扫描识别&#xff0c;还加入了艺术元素&#xff0c;增强了视觉吸引力和品牌识别度。其中&…

Vue 路由 路由守卫

路由守卫 正如其名&#xff0c; vue-router 提供的导航守卫主要用来通过跳转或取消的方式守卫导航。简单来说&#xff0c;就是在路由跳转 时候的一些钩子&#xff0c;当从一个页面跳转到另一个页面时&#xff0c;可以在跳转前、中、后做一些事情。 当你打开一个页面的前后需…

一文读透时区和时间戳以及基于Java的操作

重要概念 1. UTC 和 UTC8 UTC 是世界标准时间&#xff0c; UTC8 是东八区标准时间&#xff0c;中国就属于东八区&#xff0c; 也就是北京时间。 8 就是加8个小时。 时区的划分图示如下&#xff1a; 也就是说&#xff1a; 假如现在是UTC时间是 2023-08-08 01:00:00 &#xff0…

数据结构—哈夫曼树及其应用

5.6哈夫曼树及其应用 5.6.1哈夫曼树的基本概念 路径&#xff1a;从树中一个结点到另一个结点之间的分支构成这两个结点间的路径。 结点的路径长度&#xff1a;两结点间路径上的分支数。 树的路径长度&#xff1a;从树根到每一个结点的路径长度之和。记作 TL 结点数目相同的…

【MySQL】MySQL数据类型

文章目录 一、数据类型的分类二、tinyint类型2.1 创建有符号数值2.2 创建无符号数值 三、bit类型三、浮点类型3.1 float3.2 decimal类型 四、字符串类型4.1 char类型4.2 varchar类型 五、日期和时间类型六、枚举和集合类型6.1 enum的枚举值和set的位图结构6.2 查询集合find_in_…

带头单链表,附带完整测试程序

&#x1f354;链表基础知识 1.概念&#xff1a;链表是由多个节点链接构成的&#xff0c;节点包含数据域和指针域&#xff0c;指针域上存放的指针指向下一个节点 2.链表的种类&#xff1a;按单向或双向、带头或不带头、循环或不循环分为多个种类 3.特点&#xff1a;无法直接找到…

信号源功率输出是什么意思(功率信号源)

信号源功率输出是指信号源能够输出的最大功率。在无线电通信和电子工程领域中&#xff0c;信号源功率输出是一项非常重要的参数&#xff0c;它对信号传输距离、接收灵敏度、噪声抑制等方面都有着重要的影响。 信号源功率输出与信号传输距离密切相关。在无线电通信中&#xff0c…

二叉搜索树与双向链表(牛客网 和 剑指 Offer同类型题)

文章目录 JZ36 二叉搜索树与双向链表&#xff08;牛客网&#xff09;剑指 Offer 36. 二叉搜索树与双向链表 JZ36 二叉搜索树与双向链表&#xff08;牛客网&#xff09; 题目链接 输入一棵二叉搜索树&#xff0c;将该二叉搜索树转换成一个排序的双向链表。如下图所示 注意: 1…

亚马逊品牌推荐金计划:通过亚马逊外营销活动赚取奖金!

亚马逊美国站发布公告称新推出的品牌推荐金计划可以让卖家在通过亚马逊外营销活动的销售中获得奖金&#xff0c;当卖家将非亚马逊营销流量引导至亚马逊时&#xff0c;您将获得促销产品以及客户在接下来的两周内购买的任何品牌产品平均销售额的10%的奖金&#xff0c;以下是公告内…

【C语言初阶】使用指针求字符串长度(五个版本盘点总结)

在代码的题目中&#xff0c;我们经常会遇到需要自己手写函数&#xff0c;求字符串长度的情况&#xff0c;那么今天博主就带大家一起盘点五种求字符串长度的写法 版本一&#xff1a;判断累加法 逻辑&#xff1a;由于字符串的末位是\0&#xff0c;且\0不计入字符串长度&#xf…