golang(8):使用golang 的 encoding/json 做解析,然后转换成 create sql

前言


本文的原文连接是: https://blog.csdn.net/freewebsys/article/details/88837310
未经博主允许不得转载。
博主地址是:http://blog.csdn.net/freewebsys

1,关于encoding/json


主要使用 golang 的json 进行解析,当然可以直接用java 写。
但是还是要练习下 golang的语法,使用golang 做解析。

2,代码编写


写一个 golang 的代码:JsonParser_test.go
参考: https://blog.csdn.net/yang8023tao/article/details/53737458
返回 column 名称,解决驼峰问题

使用反射:
https://docs.hacknode.org/gopl-zh/ch12/ch12-02.html

代码:

package main

import (
	"testing"
    "encoding/json"
    "reflect"
    "fmt"
    "strings"
)

// 测试使用。
// go test JsonParser_test.go -v
func TestJson(t *testing.T) {

    t.Log("here ..")
    jsonData := `{"NickName": "zhangsan", "Age": 26, "MaxMoney": 199.66}`

    t.Log(jsonData)

    var jsonObj map[string]interface{}
    err := json.Unmarshal([]byte(jsonData), &jsonObj)

    if err != nil {
        panic(err)
        t.Error("Json字符串拼写错误")
        return
    }

    idx := 0
    len := len(jsonObj)
    t.Log(len)
    sql := "\nCREATE TABLE IF NOT EXISTS  `` ( \n"
    sql += "  `id` bigint(20) unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT ,\n"
    for k, v := range jsonObj {
        t.Log("map key , value : ", k, v)
        idx += 1
        name := getColumnName(k)
        sql += "  `" + name + "` " + getColumnType(v) + "COMMENT \"\""
        if idx < len {
            sql += ","
        }
        sql += "\n"
    }
    sql += ") ENGINE=InnoDB  AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 ; "
    t.Log(sql)

}

//参考: https://blog.csdn.net/yang8023tao/article/details/53737458
//返回 column 名称,解决驼峰问题
func getColumnName(s string) string {
    data := make([]byte, 0, len(s)*2)
    j := false
    num := len(s)
    for i := 0; i < num; i++ {
        d := s[i]
        if i > 0 && d >= 'A' && d <= 'Z' && j {
            data = append(data, '_')
        }
        if d != '_' {
            j = true
        }
        data = append(data, d)
    }
    return strings.ToLower(string(data[:]))

}

//返回 column 类型,转换 int float 和 string类型。
func getColumnType(v interface{}) string {
    out := ""

    valueType := reflect.TypeOf(v)
    switch v := reflect.ValueOf(v); v.Kind() {
    case reflect.String:
        fmt.Println(v.String())
        out = "varchar(200)"
    case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
        fmt.Println(v.Int())
        out = "bigint(20)"
    case reflect.Float32, reflect.Float64:
        fmt.Println(v.Float())
        out = "bigint(20)"
    default:
        fmt.Printf("unhandled kind %s", v.Kind())
        out = "varchar(200)"
    }
    fmt.Println("map value type : ", valueType)

    return out
}

执行:

go test JsonParser_test.go -v

完成、输入是一个json:

{"NickName": "zhangsan", "Age": 26, "MaxMoney": 199.66}

输出是一个SQL:

CREATE TABLE IF NOT EXISTS  `` ( 
          `id` bigint(20) unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT,
          `max_money` bigint(20)COMMENT "",
          `nick_name` varchar(200)COMMENT "",
          `age` bigint(20)COMMENT ""
        ) ENGINE=InnoDB  AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 ;

3,总结


使用golang 做 json 解析,就解析出两种类型 float64 和 string ,然后把这两个转换成 一个数据库sql语句。
然后可以进行开发了。小工具而已。
想想用处还是挺多的,现在的 网站都是 json 写的,就能知道这个网站的数据结构了。
通过这个数据结构可以大致知道咋存储的。都可以参考参考。

本文的原文连接是:
https://blog.csdn.net/freewebsys/article/details/88837310

博主地址是:http://blog.csdn.net/freewebsys

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值