前言
本文的原文连接是: 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