From 5517987e144ed26d15f4ce3f999e5b074c6c0289 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?piexlmax=EF=BC=88=E5=A5=87=E6=B7=BC?= Date: Fri, 15 Mar 2024 11:38:34 +0800 Subject: [PATCH] =?UTF-8?q?feature:=E4=BF=9D=E8=AF=81=E8=A1=A8=E6=A0=BC?= =?UTF-8?q?=E5=AF=BC=E5=87=BA=E7=9A=84=E5=88=97=E9=A1=BA=E5=BA=8F=E5=92=8C?= =?UTF-8?q?json=E5=BD=95=E5=85=A5=E9=A1=BA=E5=BA=8F=E4=B8=80=E8=87=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/service/system/sys_export_template.go | 9 ++-- server/utils/json.go | 34 +++++++++++++ server/utils/json_test.go | 53 ++++++++++++++++++++ 3 files changed, 93 insertions(+), 3 deletions(-) create mode 100644 server/utils/json.go create mode 100644 server/utils/json_test.go diff --git a/server/service/system/sys_export_template.go b/server/service/system/sys_export_template.go index 0fffe54ed..8a0adf21e 100644 --- a/server/service/system/sys_export_template.go +++ b/server/service/system/sys_export_template.go @@ -8,6 +8,7 @@ import ( "github.com/flipped-aurora/gin-vue-admin/server/model/common/request" "github.com/flipped-aurora/gin-vue-admin/server/model/system" systemReq "github.com/flipped-aurora/gin-vue-admin/server/model/system/request" + "github.com/flipped-aurora/gin-vue-admin/server/utils" "github.com/xuri/excelize/v2" "gorm.io/gorm" "mime/multipart" @@ -126,14 +127,16 @@ func (sysExportTemplateService *SysExportTemplateService) ExportExcel(templateID return } var templateInfoMap = make(map[string]string) + columns, err := utils.GetJSONKeys(template.TemplateInfo) + if err != nil { + return nil, "", err + } err = json.Unmarshal([]byte(template.TemplateInfo), &templateInfoMap) if err != nil { return nil, "", err } - var columns []string var tableTitle []string - for key := range templateInfoMap { - columns = append(columns, key) + for _, key := range columns { tableTitle = append(tableTitle, templateInfoMap[key]) } selects := strings.Join(columns, ", ") diff --git a/server/utils/json.go b/server/utils/json.go new file mode 100644 index 000000000..8c4118c7b --- /dev/null +++ b/server/utils/json.go @@ -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 +} diff --git a/server/utils/json_test.go b/server/utils/json_test.go new file mode 100644 index 000000000..f21a67922 --- /dev/null +++ b/server/utils/json_test.go @@ -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) +}