feature:保证表格导出的列顺序和json录入顺序一致

This commit is contained in:
piexlmax(奇淼
2024-03-15 11:38:34 +08:00
parent 7e98f61bec
commit 5517987e14
3 changed files with 93 additions and 3 deletions
+34
View File
@@ -0,0 +1,34 @@
package utils
import (
"encoding/json"
"strings"
)
func GetJSONKeys(jsonStr string) (keys []string, err error) {
// 使用json.Decoder,以便在解析过程中记录键的顺序
dec := json.NewDecoder(strings.NewReader(jsonStr))
t, err := dec.Token()
if err != nil {
return nil, err
}
// 确保数据是一个对象
if t != json.Delim('{') {
return nil, err
}
for dec.More() {
t, err = dec.Token()
if err != nil {
return nil, err
}
keys = append(keys, t.(string))
// 解析值
var value interface{}
err = dec.Decode(&value)
if err != nil {
return nil, err
}
}
return keys, nil
}
+53
View File
@@ -0,0 +1,53 @@
package utils
import (
"fmt"
"testing"
)
func TestGetJSONKeys(t *testing.T) {
var jsonStr = `
{
"Name": "test",
"TableName": "test",
"TemplateID": "test",
"TemplateInfo": "test",
"Limit": 0
}`
keys, err := GetJSONKeys(jsonStr)
if err != nil {
t.Errorf("GetJSONKeys failed" + err.Error())
return
}
if len(keys) != 5 {
t.Errorf("GetJSONKeys failed" + err.Error())
return
}
if keys[0] != "Name" {
t.Errorf("GetJSONKeys failed" + err.Error())
return
}
if keys[1] != "TableName" {
t.Errorf("GetJSONKeys failed" + err.Error())
return
}
if keys[2] != "TemplateID" {
t.Errorf("GetJSONKeys failed" + err.Error())
return
}
if keys[3] != "TemplateInfo" {
t.Errorf("GetJSONKeys failed" + err.Error())
return
}
if keys[4] != "Limit" {
t.Errorf("GetJSONKeys failed" + err.Error())
return
}
fmt.Println(keys)
}