golang-不固定格式的json

当json字符串没有固定格式时,反序列化不好定义与其相对应的结构体,此时应使用json.RawMessage将原始字节数据保存下来,再做进一步解析。json.RawMessage其实是[]byte的声明。如:

package main

import (
	"encoding/json"
	"fmt"
)

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

func main() {

	schoolStr := `{"student":{"name":"jack","age":"20"},"teacher":"lucy"}`

	var result map[string]json.RawMessage
	if err := json.Unmarshal([]byte(schoolStr), &result); err != nil {
		fmt.Printf("json.Unmarshal schoolStr err: %v\n", err)
		return
	}

	var s Student
	if err := json.Unmarshal(result["student"], &s); err != nil {
		fmt.Printf("json.Unmarshal result['student' err: %v\n]", err)
		return
	}
	fmt.Printf("s: %#v\n", s)
	fmt.Printf("s.Age type: %T\n", s.Age)
}

输出:

s: main.Student{Name:"jack", Age:20}
s.Age type: int

猜你喜欢

转载自blog.csdn.net/somanlee/article/details/106979718