Golang json NewDecoder 方法使用案例

26 min read

在Golang中,使用"encoding/json"包进行JSON编码和解码非常方便。其中,json.NewDecoder方法可以用于根据输入流创建一个新的解码器。下面是一个使用案例:

package main

import (
	"encoding/json"
	"fmt"
	"strings"
)

type Person struct {
	Name string `json:"name"`
	Age  int    `json:"age"`
}

func main() {
	// JSON字符串
	str := `{"name":"Alice","age":30}`

	// 新建解码器
	dec := json.NewDecoder(strings.NewReader(str))

	// 解码为Person类型
	var p Person
	err := dec.Decode(&p)

	if err != nil {
		fmt.Println("Error:", err)
		return
	}

	fmt.Println("Name:", p.Name)
	fmt.Println("Age:", p.Age)
}

解释:

  1. 定义了一个Person结构体,其中Name和Age分别对应JSON的"name"和"age"字段,通过json:"name"json:"age"标记来指定。
  2. 使用一个JSON字符串作为输入,在此例中,字符串中包含"name"为"Alice","age"为30的数据。
  3. 使用json.NewDecoder方法创建一个解码器,将JSON字符串转换为一个输入流(使用strings.NewReader)。
  4. 使用解码器的Decode方法将输入流解码为一个Person对象。注意,在此处需要传递一个指向Person对象的指针,否则会导致解码失败。
  5. 如果解码成功,输出Person对象的名字和年龄。如果有错误,则输出错误信息。

上述案例中,我们演示了如何使用json.NewDecoder方法将一个JSON字符串转换为一个Go语言的对象。使用类似的方法,我们也可以从文件、网络连接、标准输入等不同的输入源中读取JSON数据,然后解码为Go类型,并进行后续的处理。