From adb5f7f78e2c0228487ccc9fbf3a9880833b38f7 Mon Sep 17 00:00:00 2001 From: huangzj Date: Wed, 8 Jul 2020 11:15:50 +0800 Subject: [PATCH] =?UTF-8?q?feat(Go-Tool)=EF=BC=9A=20=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E8=AF=BB=E5=8F=96json=E6=96=87=E4=BB=B6=E6=96=B9=E6=B3=95?= =?UTF-8?q?=E5=8F=8A=E5=85=B6=E5=8D=95=E6=B5=8B=E7=B1=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- readme.md | 4 +- test/file/FileReadTool_test.go | 58 +++++++++ test/file/json_file_test_mode.json | 194 +++++++++++++++++++++++++++++ util/file/FileReadTool.go | 26 ++++ 4 files changed, 281 insertions(+), 1 deletion(-) create mode 100644 test/file/json_file_test_mode.json diff --git a/readme.md b/readme.md index ee8c239..05ce35c 100644 --- a/readme.md +++ b/readme.md @@ -22,4 +22,6 @@ 2020/6/15: 创建Set,实现相关方法 -2020/6/30: ArrayList添加深度复制方法以及单测类、添加Rand随机获取参数方法、RandByWeight根据权重随机获取奖励方法 \ No newline at end of file +2020/6/30: ArrayList添加深度复制方法以及单测类、添加Rand随机获取参数方法、RandByWeight根据权重随机获取奖励方法 + +2020/7/8: 增加读取json文件方法及其单测类 \ No newline at end of file diff --git a/test/file/FileReadTool_test.go b/test/file/FileReadTool_test.go index f978e97..5f609e2 100644 --- a/test/file/FileReadTool_test.go +++ b/test/file/FileReadTool_test.go @@ -8,6 +8,7 @@ package file import ( "Go-Tool/util/file" + "encoding/json" "fmt" "testing" ) @@ -19,3 +20,60 @@ func TestReadFileLineNum(t *testing.T) { func TestReadFileLineNumExceptEmptyLine(t *testing.T) { fmt.Println(file.ReadFileLineNumExceptEmptyLine("F:\\Go个人代码\\src\\Go-Tool\\test\\emptyDirTest\\1\\11.txt")) } + +func TestReadJsonFile(t *testing.T) { + content, _ := file.ReadJsonFile("F:\\Go个人代码\\src\\Go-Tool\\test\\file\\json_file_test_mode.json") + fmt.Println(content) + var testMode JsonTestMode + _ = json.Unmarshal([]byte(content), &testMode) + for _, r := range testMode.RareNumAward { + fmt.Println(r.Num) + fmt.Println() + for _, r1 := range r.Award { + fmt.Println(fmt.Sprintf("%d %d", r1[0], r1[1])) + } + } +} + +//被读取Json文件的测试结构体 +type JsonTestMode struct { + CandleLightingReward CandleLightingReward + + Cake []Cake + + RareNumAward []RareNumAward + + CommonNumAward [][]int + + DailyAwardPool [][]int + + DailyExtraction []DailyExtraction + + FinalAward [][]int + + CandleNumStart int + + CandleNumInterval int + + DiamondNum int + + ThemeId int +} + +type CandleLightingReward struct { + Num int + AwardPool [][]int +} +type Cake struct { + Level int + CandleNum int + Award [][]int +} +type RareNumAward struct { + Num int + Award [][]int +} +type DailyExtraction struct { + Day int + Num int +} diff --git a/test/file/json_file_test_mode.json b/test/file/json_file_test_mode.json new file mode 100644 index 0000000..077da46 --- /dev/null +++ b/test/file/json_file_test_mode.json @@ -0,0 +1,194 @@ +{ + "CandleLightingReward": { + "Num": 1, + "AwardPool": [ + [522, 1, 20], + [520, 1, 20], + [529, 1, 20], + [215, 1, 20], + [508, 1, 20] + ] + }, + "Cake": [{ + "Level": 1, + "CandleNum": 600000, + "Award": [ + [303, 1], + [221, 1], + [522, 1], + [520, 1], + [215, 1], + [505, 1] + ] + }, { + "Level": 2, + "CandleNum": 400000, + "Award": [ + [529, 4], + [221, 1], + [522, 1], + [520, 1], + [215, 1], + [505, 1] + ] + }, { + "Level": 3, + "CandleNum": 200000, + "Award": [ + [529, 3], + [221, 1], + [522, 1], + [520, 1], + [215, 1], + [505, 1] + ] + }, { + "Level": 4, + "CandleNum": 150000, + "Award": [ + [529, 2], + [221, 1], + [522, 1], + [520, 1], + [215, 1], + [505, 1] + ] + }, { + "Level": 5, + "CandleNum": 100000, + "Award": [ + [529, 2], + [221, 1], + [522, 1], + [520, 1], + [215, 1], + [505, 1] + ] + }, { + "Level": 6, + "CandleNum": 50000, + "Award": [ + [529, 1], + [221, 1], + [522, 1], + [520, 1], + [215, 1], + [505, 1] + ] + }], + "RareNumAward": [{ + "Num": 2, + "Award": [ + [303, 1], + [220, 1], + [221, 1], + [522, 2], + [520, 2] + ] + }, { + "Num": 22, + "Award": [ + [303, 1], + [220, 1], + [221, 1], + [522, 3], + [520, 3] + ] + }, { + "Num": 222, + "Award": [ + [303, 2], + [220, 1], + [221, 1], + [522, 3], + [520, 3] + ] + }, { + "Num": 2222, + "Award": [ + [303, 2], + [220, 2], + [221, 2], + [522, 3], + [520, 3] + ] + }, { + "Num": 22222, + "Award": [ + [303, 2], + [220, 2], + [221, 3], + [522, 5], + [520, 5] + ] + }, { + "Num": 222222, + "Award": [ + [303, 3], + [220, 2], + [221, 3], + [522, 5], + [520, 5] + ] + }, { + "Num": 2222222, + "Award": [ + [581, 1], + [220, 3], + [221, 3], + [522, 5], + [520, 5] + ] + }], + "CommonNumAward": [ + [215, 2], + [522, 1], + [520, 1] + ], + "DailyAwardPool": [ + [522, 1, 13], + [520, 1, 13], + [529, 1, 13], + [215, 1, 13], + [221, 1, 13], + [236, 1, 11], + [505, 1, 11], + [506, 1, 10] + ], + "DailyExtraction": [{ + "Day": 1, + "Num": 1 + }, { + "Day": 2, + "Num": 1 + }, { + "Day": 3, + "Num": 2 + }, { + "Day": 4, + "Num": 2 + }, { + "Day": 5, + "Num": 2 + }, { + "Day": 6, + "Num": 3 + }, { + "Day": 7, + "Num": 3 + }], + "FinalAward": [ + [565, 2], + [303, 2], + [220, 1], + [522, 1], + [520, 1], + [301, 1], + [236, 1], + [221, 1] + ], + "CandleNumStart": 3, + "CandleNumInterval": 10, + "DiamondNum": 40, + "ThemeId": 6 +} \ No newline at end of file diff --git a/util/file/FileReadTool.go b/util/file/FileReadTool.go index 75b2b4f..a193af0 100644 --- a/util/file/FileReadTool.go +++ b/util/file/FileReadTool.go @@ -9,6 +9,7 @@ package file import ( err2 "Go-Tool/err" "bufio" + "encoding/json" "fmt" "io" "io/ioutil" @@ -110,3 +111,28 @@ func ReadFileLineNumExceptEmptyLine(filePath string) (int, *err2.FileError) { } return num, nil } + +//读取json文件内容 +//这边发现就是说如果按照正常的文件读取方式来读取json文件,读取到的内容是乱码的 +//所以这边通过加解码的方式来读取,返回一个json串出去 +//外部的调用者通过解析转换成对应的结构体对象 +//@param filePath 文件路径 +func ReadJsonFile(filePath string) (string, error) { + filePtr, err := os.Open(filePath) + if err != nil { + return "", err + } + defer filePtr.Close() + + decoder := json.NewDecoder(filePtr) + sMap := make(map[string]interface{}, 0) + err = decoder.Decode(&sMap) + if err != nil { + return "", err + } + bs, err := json.Marshal(sMap) + if err != nil { + return "", err + } + return string(bs), nil +}