From 73da7abdaa07ccdcba02ee28d425a38444a6cbde Mon Sep 17 00:00:00 2001 From: flybread <1015126672@qq.com> Date: Thu, 5 Jun 2025 17:01:32 +0800 Subject: [PATCH] =?UTF-8?q?bindJSon=E7=9A=84=E6=BA=90=E7=A0=81=E8=AF=BB?= =?UTF-8?q?=E7=9A=84=E5=8E=9F=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- learnCode/bindJson_read_test.go | 52 +++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 learnCode/bindJson_read_test.go diff --git a/learnCode/bindJson_read_test.go b/learnCode/bindJson_read_test.go new file mode 100644 index 00000000..4ae84213 --- /dev/null +++ b/learnCode/bindJson_read_test.go @@ -0,0 +1,52 @@ +package bufio + +import ( + "encoding/json" + "io" + "strings" + "testing" +) + +/** +为什么BindJSON不能调用第二次,对应的测试用例Uri: /bingJson1 +*/ + +func TestJSonDeCode(t *testing.T) { + // 示例JSON字符串 + jsonStr := `{"name":"张三","age":30}` + // 将字符串转换为io.Reader + ioR := strings.NewReader(jsonStr) + newDecoder := json.NewDecoder(ioR) + obj := new(map[string]interface{}) + if err := newDecoder.Decode(obj); err != nil { + t.Error(err) + } else { + t.Log(obj) + //第二次的调用Decode方法,Json内部使用的是dec.readValue(),碰到具体的 + if err = newDecoder.Decode(obj); err != nil { + t.Error(err) //json_read_test.go:22: EOF 读到了文件的末尾 + } else { + t.Log(obj) + } + } +} + +func TestIoReadAll(t *testing.T) { + // 示例JSON字符串 + jsonStr := `{"name":"张三","age":30}` + // 将字符串转换为io.Reader + ioR := strings.NewReader(jsonStr) + //这里可以对比一下 io.ReadAll 和 readValue + body, err := io.ReadAll(ioR) + if err != nil { + t.Error(err) + } else { + t.Log(string(body)) + body, err = io.ReadAll(ioR) + if err != nil { + t.Error(err) + } else { + t.Log(string(body)) + } + } +}