支持简单的基础类型list

This commit is contained in:
白茶清欢 2021-11-09 21:32:03 +08:00
parent 81fb0900df
commit d491d147f4

View File

@ -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)
continue
}
if jg.getDataType(item) != dataType {
// 不是所有数据类型都一致
if len(key) == 0 {
jg.result += "interface{}"
return
}
jg.append(jg.buildField("[]interface{}", key))
return
}
}
// 所有数据类型都一致
if len(key) == 0 {
jg.append("[]" + dataType)
} else { } else {
jg.result += util.SnakeCaseToCamel(key) + " " + v.Type.String() + " `json:\"" + key + "\"`" jg.append(jg.buildField("[]"+dataType, key))
} }
}
return ""
} }
// 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
}