您的位置:首页 > Web前端 > JavaScript

根据json数据生成建表脚本的解决方案

2016-12-01 10:28 274 查看
开发中,经常需要调用各种接口,而大部分接口都以json格式返回数据。

前段时间,有个需求,需要将json数据保存进数据库,而根据json数据建立相应的数据库表是个很耗体力的工作,所以决定开发一个小工具 ,可以根据json数据自动生成建表脚本。

该工具使用Newtonsoft.Json序列化工具解析json数据,再逐字段生成SQL脚本。下面是工具的主体代码。

using Newtonsoft.Json.Linq;
using System;
using System.Windows.Forms;

namespace YLTool
{
public partial class frmCreateSqlFromJson : Form
{
private string sepMark = " ";

public frmCreateSqlFromJson()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
try
{
JObject jo = JObject.Parse(textBox1.Text);
string sql = @"CREATE TABLE NND(" + Environment.NewLine;
sql = sql + @"NND_id mediumint(8) unsigned NOT NULL AUTO_INCREMENT COMMENT 'NND_id',";
foreach (var j in jo)
{
if ("Integer".Equals(j.Value.Type.ToString()))
{
if (j.Key.Contains("is_") || j.Key.Contains("type"))
{
sql = sql + j.Key + sepMark + @"tinyint(4) NOT NULL COMMENT" + sepMark + "'" + j.Key + "'," + Environment.NewLine;
}
else
{
sql = sql + j.Key + sepMark + @"mediumint(8) unsigned NOT NULL DEFAULT '0' COMMENT" + sepMark + "'" + j.Value + "'," + Environment.NewLine;
}
}
else if ("String".Equals(j.Value.Type.ToString()))
{
decimal tempDecimal = 0;
DateTime dt = new DateTime();
if (decimal.TryParse(j.Value.ToString(), out tempDecimal))
{
sql = sql + j.Key + sepMark + @"decimal(11,2) NOT NULL COMMENT" + sepMark + "'" + j.Key + "'," + Environment.NewLine;
continue;
}
if (DateTime.TryParse(j.Value.ToString(), out dt))
{
sql = sql + j.Key + sepMark + @"datetime NOT NULL COMMENT" + sepMark + "'" + j.Key + "'," + Environment.NewLine;
continue;
}
else
{
sql = sql + j.Key + sepMark + @"varchar(50) NOT NULL COMMENT" + sepMark + "'" + j.Key + "'," + Environment.NewLine;
continue;
}
}
}
sql = sql + @"PRIMARY KEY (NND_id)" + Environment.NewLine;
sql = sql + ")";
textBox2.Text = sql;
}
catch (Exception ex)
{
textBox2.Text = "出错啦!~~~~~~~~~~~~~~" + Environment.NewLine + ex.Message;
}
}
}
}


本工具暂时生成的是mysql的建库脚本,也只支持varchar等很少的类型。工具的画面如下图所示。



后面计划,丰富工具这持的类型,丰富支持的数据库系统,待续。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息