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