【Golang】将JOSN反序列化到map或结构体中,实际上是添加key-value或修改结构体成员

260 阅读1分钟

反序列化到map

示例程序:

func main() {
   mp := map[string]bool{
      "a": false,
   }

   s1 := "{\"b\": true, \"c\": false}"
   err := json.Unmarshal([]byte(s1), &mp)
   if err != nil {
      fmt.Println("err:", err)
      return
   }

   fmt.Println(mp)

   s1 = "{\"a\": true, \"b\": false, \"d\": true, \"e\": false}"
   err = json.Unmarshal([]byte(s1), &mp)
   if err != nil {
      fmt.Println("err:", err)
      return
   }

   fmt.Println(mp)

   s1 = "{}"
   err = json.Unmarshal([]byte(s1), &mp)
   if err != nil {
      fmt.Println("err:", err)
      return
   }

   fmt.Println(mp)
}

输出结果:

map[a:false b:true c:false]
map[a:true b:false c:false d:true e:false]
map[a:true b:false c:false d:true e:false]

结论:
将JSON反序列化到map中,实际上是向map添加key-value

反序列化到结构体

示例程序:

type testJSON struct {
   Name string
   Addr string
   Age  int
}

func main() {
   t1 := testJSON{
      Name: "初始化名字",
      Age:  0,
   }
   s1 := "{\"addr\": \"这是一个地址\"}"
   err := json.Unmarshal([]byte(s1), &t1)
   if err != nil {
      fmt.Println(err)
      return
   }

   fmt.Println(t1)

   s1 = "{\"Name\": \"张三\", \"age\":18}"
   err = json.Unmarshal([]byte(s1), &t1)
   if err != nil {
      fmt.Println(err)
      return
   }

   fmt.Println(t1)
}

输出结果:

{初始化名字 这是一个地址 0}
{张三 这是一个地址 18}

结论:
反序列化到结构体,实际上是修改结构体的成员