Go 解析json

xml, yaml解析的用法类似

xml 使用库encodeing/xml

yaml 使用库 gopkg.in/yaml.v2

JSON:JavaScript 对象表示法(JavaScript Object Notation)。 JSON 是存储和交换文本信息的语法。类似 XML。 JSON 比 XML 更小、更快,更易解析

序列化

package main

import (
    "encoding/json"
    "fmt"
)

type Person struct {
    Name string
    Age  int
    Sex  string
}

func main() {
    p := &Person{
        Name: "John",
        Age:  24,
        Sex:  "man",
    }
    // data, _ := json.MarshalIndent(p, "", "    ") 格式化
    data, _ := json.Marshal(p)
    fmt.Println(string(data))
}
package main

import (
    "encoding/json"
    "fmt"
)

type Person struct {
    Name string `json:"name"`
    Age  int    `json:"-"`
    Sex  string `json:"sex,omitempty"`
}

// 解析的时候忽略该字段。默认情况下会解析这个字段,因为它是大写字母开头的
// Field int   `json:"-"`

// 解析(encode/decode) 的时候,使用 `other_name`,而不是 `Field`
// Field int   `json:"other_name"`

// 解析的时候使用 `other_name`,如果struct 中这个值为空,就忽略它
// Field int   `json:"other_name,omitempty"

func main() {
    persons := []Person{
        Person{
            Name: "John",
            Age: 24,
            Sex: "man",
        },
        Person{
            Name: "Anna",
            Age: 22,
        },
    }
    data, _ := json.Marshal(persons)
    fmt.Println(string(data))
}

反序列化

package main

import (
    "encoding/json"
    "fmt"
)

type Person struct {
    Name string `json:"name"`
    Age  int    `json:"age"`
    Sex  string `json:"sex,omitempty"`
}

func main() {
    pJson := `{"name":"John","Age":24,"Sex":"man"}`
    p := &Person{}
    err := json.Unmarshal([]byte(pJson), p)
    if err != nil {
        fmt.Println(err.Error())
    }
    fmt.Println(p.Name)
}
func main() {
    pJson := `[{"name":"John","sex":"man"},{"name":"Anna","age":24}]`
    p := []Person{}
    err := json.Unmarshal([]byte(pJson), &p)
    if err != nil {
        log.Fatal(err.Error())
    }
    fmt.Println(p)
}

Last updated

Was this helpful?