记录一下遇到的问题 java将json数据解析为sql语句

摘要:
将此类json数据转换为sql语句的解决方案是importjava。util。迭代器;importjava.util.Set;importjava.util.Map.Entry;importcom.google.gson.JsonArray;importcom.google.gson.JsonElement;importcom.google.gson.JsonObject;importcom公司

这样的json数据转换成sql语句

记录一下遇到的问题 java将json数据解析为sql语句第1张

  解决办法

import java.util.Iterator;

import java.util.Set;
import java.util.Map.Entry;
 
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
 
public class Sql
{
    public static String parseSQL(String json)
    {
        JsonParser parser = new JsonParser();
        JsonObject obj = (JsonObject) parser.parse(json);;
        String table = obj.get("table").getAsString();
        String op_type = obj.get("op_type").getAsString();
        String sql = "";
        if("I".equals(op_type))
        {
            sql += "INSERT INTO " + table + " (";
            JsonObject after = (JsonObject) obj.get("after");
            Set<Entry<String, JsonElement>> entry = after.entrySet();
            Iterator<Entry<String, JsonElement>> it = entry.iterator();
            String vs = " values (";
            while(it.hasNext())
            {
                Entry<String, JsonElement> elem = it.next();
                String key = elem.getKey();
                String val = elem.getValue().toString();
                sql += key + ", ";
                vs += val + ", ";
            }
            sql = sql.replaceAll(",\s*$", "");
            vs = vs.replaceAll(",\s*$", "");
            sql += ") " + vs + ")";
        }
        else if("U".equals(op_type))
        {
            sql += "UPDATE " + table + " SET ";
            JsonObject after = (JsonObject) obj.get("after");
            Set<Entry<String, JsonElement>> entry = after.entrySet();
            Iterator<Entry<String, JsonElement>> it = entry.iterator();
            while(it.hasNext())
            {
                Entry<String, JsonElement> elem = it.next();
                String key = elem.getKey();
                String val = elem.getValue().toString();
                sql += key + "=" + val + ", ";
            }
            sql = sql.replaceAll(",\s*$", "");
            sql += " WHERE ";
            after = (JsonObject) obj.get("before");
            entry = after.entrySet();
            it = entry.iterator();
            while(it.hasNext())
            {
                Entry<String, JsonElement> elem = it.next();
                String key = elem.getKey();
                String val = elem.getValue().toString();
                sql += key + "=" + val + " AND ";
            }
            sql = sql.replaceAll("\s*AND\s*$", "");
        }
        else if("D".equals(op_type))
        {
            sql += "DELETE FROM " + table + " WHERE ";
            JsonObject after = (JsonObject) obj.get("before");
            Set<Entry<String, JsonElement>> entry = after.entrySet();
            Iterator<Entry<String, JsonElement>> it = entry.iterator();
            while(it.hasNext())
            {
                Entry<String, JsonElement> elem = it.next();
                String key = elem.getKey();
                String val = elem.getValue().toString();
                sql += key + "=" + val + " AND ";
            }
            sql = sql.replaceAll("\s*AND\s*$", "");
        }
        return sql;
    }

 测试

public static void main(String[] args)
    {
        String insert =
                "{"table":"GG.TCUSTORD","op_type":"I","op_ts":"2013-06-02 22:14:36.000000","current_ts":"2015-09-18T13:39:35.447000","pos":"00000000000000001444","tokens":{"R":"AADPkvAAEAAEqL2AAA"},"after":{"CUST_CODE":"WILL","ORDER_DATE":"1994-09-30:15:33:00","PRODUCT_CODE":"CAR","ORDER_ID":"144","PRODUCT_PRICE":17520.00,"PRODUCT_AMOUNT":3,"TRANSACTION_ID":"100"}}";
        String update =
                "{"table":"GG.TCUSTORD","op_type":"U","op_ts":"2013-06-02 22:14:41.000000","current_ts":"2015-09-18T13:39:35.748000","pos":"00000000000000002891","tokens":{"L":"206080450","6":"9.0.80330","R":"AADPkvAAEAAEqLzAAC"},"before":{"CUST_CODE":"BILL","ORDER_DATE":"1995-12-31:15:00:00","PRODUCT_CODE":"CAR","ORDER_ID":"765","PRODUCT_PRICE":15000.00,"PRODUCT_AMOUNT":3,"TRANSACTION_ID":"100"},"after":{"CUST_CODE":"BILL","ORDER_DATE":"1995-12-31:15:00:00","PRODUCT_CODE":"CAR","ORDER_ID":"765","PRODUCT_PRICE":14000.00,"PRODUCT_AMOUNT":3,"TRANSCATION_ID":"100"}}";
        String delete =
                "{"table":"GG.TCUSTORD","op_type":"D","op_ts":"2013-06-02 22:14:41.000000","current_ts":"2015-09-18T13:39:35.766000","pos":"00000000000000004338","tokens":{"L":"206080450","6":"9.0.80330","R":"AADPkvAAEAAEqLzAAC"},"before":{"CUST_CODE":"DAVE","ORDER_DATE":"1993-11-03:07:51:35","PRODUCT_CODE":"PLANE","ORDER_ID":"600"}}";
        System.out.println(parseSQL(insert));
        System.out.println(parseSQL(update));
        System.out.println(parseSQL(delete));
    }
}

免责声明:文章转载自《记录一下遇到的问题 java将json数据解析为sql语句》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇漏洞分析之CVE-2018-0802ON_MESSAGE的使用(转)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Mysql—用存储过程和事件每月定时创建一张数据库表

业务需求,把用户操作日志写入一张日志表sys_oper_log。上线2个月来,有74万条记录了。 现考虑要分库分表了。每个月初先备份以sys_oper_log为前缀,日期年月为后缀的数据库表,比如:sys_oper_log_202007 ,然后再创建一张以sys_oper_log数据库表。 实现思路:Mysql如何每月自动建表?一、新建事件每月调用存储过程...

MySQL调优基础, 与hikari数据库连接池配合

1.根据硬件配置系统参数 wait_timeout   非交互连接的最大存活时间, 10-30min    max_connections   全局最大连接数 默认100 根据情况调整    back_log    达到max_connections后, 还能继续接受的连接请求数, linux不超过1000, 根据情况调整  thread_concurre...

C#将类对象转换为字典

主要是实现将类里面 的属性和对应的值转换为字典的键和值。 public class RDfsedfw { /// <summary> /// 将匿名类转换为字典 /// </summary> /// <returns></return...

(转)C# Windows服务 弹出消息提醒框

出处:http://blog.csdn.net/donghui6116773/article/details/53467069 服务(Service)对于大家来说一定不会陌生,它是Windows 操作系统重要的组成部分。我们可以把服务想像成一种特殊的应用程序,它随系统的“开启~关闭”而“开始~停止”其工作内容,在这期间无需任何用户参与。 Windows 服...

java 注解 Annontation

什么是注解?   对于很多初次接触的开发者来说应该都有这个疑问?Annontation是Java5开始引入的新特征,中文名称叫注解。它提供了一种安全的类似注释的机制,用来将任何的信息或元数据(metadata)与程序元素(类、方法、成员变量等)进行关联。为程序的元素(类、方法、成员变量)加上更直观更明了的说明,这些说明信息是与程序的业务逻辑无关,并且供指定...

WPF学习笔记:ComboBox的数据绑定

UI <UserControl x: xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"...