Json 转 mysql create table

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 如果有大佬看到bug 或者可以优化的地方,可以帮忙指出来 不胜感激
packagecom.github.kewei1;
importcom.alibaba.fastjson.JSON;
importcom.alibaba.fastjson.JSONObject;
importcom.github.kewei1.model.JsonMetaNode;
importjava.util.ArrayList;
importjava.util.Iterator;
importjava.util.List;
importjava.util.Set;
publicclassJsonToBean {
publicstaticStringINTEGER="java.lang.Integer";
publicstaticStringLONG="java.lang.Long";
publicstaticStringSTRING="java.lang.String";
publicstaticStringJSONOBJECT="com.alibaba.fastjson.JSONObject";
publicstaticStringJSONArray="com.alibaba.fastjson.JSONArray";
publicstaticStringFLOAT="java.lang.Float";
publicstaticStringDOUBLE="java.lang.Double";
publicstaticStringBIG_DECIMAL="java.math.BigDecimal";
publicstaticStringDATE="java.util.Date";
/*** 建表语句** [url=home.php?mod=space&uid=686208]@AuThor[/url] sql* [url=home.php?mod=space&uid=686237]@date[/url] 10/23/17 3:43 PM*/privatestaticStringcreateTable(StringtableName, List<JsonMetaNode>jsonMetaNodeList) {
StringsqlCreate="CREATE TABLE "+tableName+"(\n"+getRowName(jsonMetaNodeList);
returnsqlCreate;
    }
privatestaticStringgetRowName(List<JsonMetaNode>jsonMetaNodeList) {
StringBuffersqlRowNameBuffer=newStringBuffer();
booleanhasId=false;
for (JsonMetaNodejsonMetaNode : jsonMetaNodeList) {
Stringkey=jsonMetaNode.getKey();
StringvalueType=jsonMetaNode.getValueType();
Stringtype="";
if (INTEGER.equals(valueType)) {
type="int(100)";
            } elseif (LONG.equals(valueType)) {
type="bigint(100)";
            } elseif (STRING.equals(valueType)) {
type="varchar(100)";
            } elseif (BIG_DECIMAL.equals(valueType)) {
type="decimal(18,8)";
            } elseif (FLOAT.equals(valueType)) {
type="float(100,10)";
            } elseif (DOUBLE.equals(valueType)) {
type="double(100,10)";
            } elseif (DATE.equals(valueType)) {
type="datetime";
            } elseif (JSONOBJECT.equals(valueType) ||JSONArray.equals(valueType)) {
type="json";
            }else {
type="varchar(100)";
            }
sqlRowNameBuffer.append(key).append(" ").append(type).append(" ").append("NULL");
if (key.equals("id")){
hasId=true;
sqlRowNameBuffer.append(" ").append("NOT NULL ,").append("\r\n");
            }else {
sqlRowNameBuffer.append(",").append("\r\n");
            }
        }
if (!hasId){
sqlRowNameBuffer.append("id").append(" ").append("int(12)").append(" ").append(" ")
                    .append("NOT NULL ,").append("\r\n PRIMARY KEY (`id`) ");
        }
sqlRowNameBuffer.deleteCharAt(sqlRowNameBuffer.length() -1);
sqlRowNameBuffer.append(" ) ENGINE=InnoDB;");
StringsqlRowName=sqlRowNameBuffer.toString();
returnsqlRowName;
    }
publicstaticStringjsontosql(StringtableName, Stringjson)  {
List<JsonMetaNode>jsonMetaNodeList=newArrayList<JsonMetaNode>();
// 转换成json对象JSONObjectjsonObject= (JSONObject) JSON.parse(json);
Set<String>strings=jsonObject.keySet();
Iterator<String>iterator=strings.iterator();
// 遍历json对象,根据key获取value并获取value的类型while (iterator.hasNext()) {
JsonMetaNodejsonMete=newJsonMetaNode();
Stringnext=iterator.next();
jsonMete.setKey(next);
Objecto=jsonObject.get(next);
if (o!=null) {
Stringname=o.getClass().getName();
jsonMete.setValueType(name);
            }
jsonMetaNodeList.add(jsonMete);
        }
// 调用建表语句的方法StringsqlCreateTable=createTable(tableName, jsonMetaNodeList);
System.out.println(sqlCreateTable);
returnsqlCreateTable;
    }
publicstaticvoidmain(String[] args) {
Strings="{\"p_id\":\"73\",\"p_title\":\"微光波炉\\/烤箱保养\",\"p_mode\":\"1\",\"p_summary\":\"健康生活\",\"p_icon\":\"1491634953186.jpeg\",\"p_imageUrl\":null,\"p_priceA\":\"80\",\"p_priceB\":null,\"p_duration\":\"60\",\"p_introduce\":\"微波炉、烤箱等长时间不清洁会造成机器内汤汁堆积,对加热食物带来种种异味,滋生细菌,直接会导致肠道疾病。我们的高温深层次消毒服务,将微波炉进行深度清洁,去异味,高温杀菌,保障健康生活,延长微波炉使用寿命。\",\"p_fit_people\":\"微波炉\\/烤箱\",\"p_service_introduce\":\"\",\"p_pubtime\":\"1491634954\",\"p_pv\":\"1927\",\"c_id\":\"30\",\"m_id\":\"100\"}";
Stringyy="{\n"+"\t\"animals\":{\n"+"\t\"dog\":[\n"+"\t\t{\"name\":\"Rufus\",\"breed\":\"labrador\",\"count\":1,\"twoFeet\":false},\n"+"\t\t{\"name\":\"Marty\",\"breed\":\"whippet\",\"count\":1,\"twoFeet\":false}\n"+"\t],\n"+"\t\"cat\":{\"name\":\"Matilda\"}\n"+"}\n"+"}";
// create tableStringjsontosql=jsontosql("test", yy);
    }
}

image.png

image.png

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
5天前
|
SQL 关系型数据库 MySQL
MySQL 8.0报错--1118-Row size too large. The maximum row size for the used table type, not counting BLOBs,is 8126,
MySQL 8.0报错--1118-Row size too large. The maximum row size for the used table type, not counting BLOBs,is 8126,
MySQL 8.0报错--1118-Row size too large. The maximum row size for the used table type, not counting BLOBs,is 8126,
|
1月前
|
存储 JSON 关系型数据库
MySQL与JSON的邂逅:开启大数据分析新纪元
MySQL与JSON的邂逅:开启大数据分析新纪元
|
1月前
|
关系型数据库 MySQL Java
【Azure 应用服务】应用服务连接 Azure MySQL 一直失败,报错 Create connection error
【Azure 应用服务】应用服务连接 Azure MySQL 一直失败,报错 Create connection error
|
2月前
|
SQL 安全 关系型数据库
MySQL创建视图(CREATE VIEW)13
【7月更文挑战第13天】创建视图是指在已经存在的 MySQL 数据库表上建立视图。视图可以建立在一张表中,也可以建立在多张表中。
51 1
|
2月前
|
关系型数据库 MySQL 数据库
Mysqlbug-Could not create or access the registry key needed for the MySQL applicationto, TIMESTAMP w
Mysqlbug-Could not create or access the registry key needed for the MySQL applicationto, TIMESTAMP w
|
3月前
|
JSON 关系型数据库 MySQL
MySQL中GROUP_CONCAT与JSON_OBJECT、GROUP BY的巧妙结合:打造高效JSON数组汇总
MySQL中GROUP_CONCAT与JSON_OBJECT、GROUP BY的巧妙结合:打造高效JSON数组汇总
|
3月前
|
JSON 关系型数据库 MySQL
理解和利用MySQL中的JSON功能
理解和利用MySQL中的JSON功能
91 2
|
3月前
|
关系型数据库 MySQL 数据库
【MySQL】MySQL数据库的delete from table和truncate table之间的区别
【MySQL】MySQL数据库的delete from table和truncate table之间的区别
293 1
|
3月前
|
JSON 关系型数据库 MySQL
实时计算 Flink版产品使用问题之在使用CDAS语法同步MySQL数据到Hologres时,如果开启了字段类型宽容模式,MySQL中的JSON类型会被转换为什么
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
3月前
|
存储 JSON 关系型数据库
MySQL JSON 类型:功能与应用
MySQL JSON 类型:功能与应用