支持简单的基础类型list
This commit is contained in:
parent
81fb0900df
commit
d491d147f4
@ -33,7 +33,6 @@ func NewJSON2GO(name string) *JSON2GO {
|
|||||||
}
|
}
|
||||||
return &JSON2GO{
|
return &JSON2GO{
|
||||||
structName: name,
|
structName: name,
|
||||||
result: "type " + name + " struct { \n",
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -58,11 +57,13 @@ func (jg *JSON2GO) Parse(inputJSON string) (string, error) {
|
|||||||
}
|
}
|
||||||
parseResult := gjson.Parse(inputJSON)
|
parseResult := gjson.Parse(inputJSON)
|
||||||
if parseResult.IsArray() {
|
if parseResult.IsArray() {
|
||||||
|
jg.append("type " + jg.structName + " [] \n")
|
||||||
jg.parseArray("", parseResult)
|
jg.parseArray("", parseResult)
|
||||||
} else {
|
} else {
|
||||||
|
jg.append("type " + jg.structName + " struct { \n")
|
||||||
jg.parseObject("", parseResult)
|
jg.parseObject("", parseResult)
|
||||||
}
|
}
|
||||||
jg.result += "}"
|
jg.append("}")
|
||||||
return jg.result, nil
|
return jg.result, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -71,17 +72,30 @@ func (jg *JSON2GO) Parse(inputJSON string) (string, error) {
|
|||||||
// Author : go_developer@163.com<白茶清欢>
|
// Author : go_developer@163.com<白茶清欢>
|
||||||
//
|
//
|
||||||
// Date : 4:37 下午 2021/11/9
|
// Date : 4:37 下午 2021/11/9
|
||||||
func (jg *JSON2GO) parseArray(key string, parseResult gjson.Result) string {
|
func (jg *JSON2GO) parseArray(key string, parseResult gjson.Result) {
|
||||||
for _, v := range parseResult.Array() {
|
// 先遍历一遍确认所有数据类型都相同
|
||||||
if v.IsObject() {
|
dataType := ""
|
||||||
jg.parseObject(key, v)
|
for _, item := range parseResult.Array() {
|
||||||
} else if v.IsArray() {
|
if len(dataType) == 0 {
|
||||||
jg.parseArray("", v)
|
dataType = jg.getDataType(item)
|
||||||
} else {
|
continue
|
||||||
jg.result += util.SnakeCaseToCamel(key) + " " + v.Type.String() + " `json:\"" + key + "\"`"
|
}
|
||||||
|
if jg.getDataType(item) != dataType {
|
||||||
|
// 不是所有数据类型都一致
|
||||||
|
if len(key) == 0 {
|
||||||
|
jg.result += "interface{}"
|
||||||
|
return
|
||||||
|
}
|
||||||
|
jg.append(jg.buildField("[]interface{}", key))
|
||||||
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return ""
|
// 所有数据类型都一致
|
||||||
|
if len(key) == 0 {
|
||||||
|
jg.append("[]" + dataType)
|
||||||
|
} else {
|
||||||
|
jg.append(jg.buildField("[]"+dataType, key))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// parseObject 解析object
|
// parseObject 解析object
|
||||||
@ -99,11 +113,11 @@ func (jg *JSON2GO) parseObject(key string, parseResult gjson.Result) string {
|
|||||||
} else if v.IsArray() {
|
} else if v.IsArray() {
|
||||||
jg.parseArray(k, v)
|
jg.parseArray(k, v)
|
||||||
} else {
|
} else {
|
||||||
jg.result += util.SnakeCaseToCamel(k) + " " + jg.getDataType(v) + " `json:\"" + k + "\"`\n"
|
jg.append(jg.buildField(jg.getDataType(v), k))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if len(key) > 0 {
|
if len(key) > 0 {
|
||||||
jg.result += " } `json:\"" + key + "\"`\n"
|
jg.append(" } `json:\"" + key + "\"`\n")
|
||||||
}
|
}
|
||||||
return ""
|
return ""
|
||||||
}
|
}
|
||||||
@ -129,7 +143,27 @@ func (jg *JSON2GO) getDataType(val gjson.Result) string {
|
|||||||
return "float64"
|
return "float64"
|
||||||
}
|
}
|
||||||
return "int64"
|
return "int64"
|
||||||
|
case gjson.JSON:
|
||||||
|
return "object"
|
||||||
default:
|
default:
|
||||||
return "interface{}"
|
return "interface{}"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// buildField 构建字段
|
||||||
|
//
|
||||||
|
// Author : go_developer@163.com<白茶清欢>
|
||||||
|
//
|
||||||
|
// Date : 9:20 下午 2021/11/9
|
||||||
|
func (jq *JSON2GO) buildField(fieldType string, jsonTag string) string {
|
||||||
|
return util.SnakeCaseToCamel(jsonTag) + " " + fieldType + " `json:\"" + jsonTag + "\"`\n"
|
||||||
|
}
|
||||||
|
|
||||||
|
// append 构建result
|
||||||
|
//
|
||||||
|
// Author : go_developer@163.com<白茶清欢>
|
||||||
|
//
|
||||||
|
// Date : 9:19 下午 2021/11/9
|
||||||
|
func (jq *JSON2GO) append(appendStr string) {
|
||||||
|
jq.result += appendStr
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user