Go 处理json

Submitted by Lizhe on Mon, 09/11/2017 - 16:37

 

package main

import (
    "encoding/json"
    "fmt"
)

func main() {
    type Employee struct {
        Id      int    `json:"id"`
        Name    string `json:"name"`
        Age     int    `json:"age"`
        address string `json:"address"`
    }
    var emps = []Employee{
        {Id: 1, Name: "John", Age: 20, address: "address1"},
        {Id: 2, Name: "Tom", Age: 20, address: "address2"},
        {Id: 3, Name: "Mary", Age: 20, address: "address3"},
    }

    data, err := json.Marshal(emps)
    if err == nil {
        fmt.Printf("%s\n", data)
    }

    dataformatted, errf := json.MarshalIndent(emps, "","    ")
    if errf == nil {
        fmt.Printf("%s\n", dataformatted)
    }
}
 

输出

[{"id":1,"name":"John","age":20},{"id":2,"name":"Tom","age":20},{"id":3,"name":"Mary","age":20}]
[
    {
        "id": 1,
        "name": "John",
        "age": 20
    },
    {
        "id": 2,
        "name": "Tom",
        "age": 20
    },
    {
        "id": 3,
        "name": "Mary",
        "age": 20
    }
]
 

 

unmarshal处理

package main

import (
    "encoding/json"
    "fmt"
)

func main() {
    type Employee struct {
        Id      int    `json:"id"`
        Name    string `json:"name"`
        Age     int    `json:"age"`
        address string `json:"address"`
    }
    var emps = []Employee{
        {Id: 1, Name: "John", Age: 20, address: "address1"},
        {Id: 2, Name: "Tom", Age: 20, address: "address2"},
        {Id: 3, Name: "Mary", Age: 20, address: "address3"},
    }

    data, err := json.Marshal(emps)
    if err == nil {
        fmt.Printf("%s\n", data)
    }

    dataformatted, errf := json.MarshalIndent(emps, "","    ")
    if errf == nil {
        fmt.Printf("%s\n", dataformatted)
    }
    
    var umData []Employee;
    errum:=json.Unmarshal(data, &umData);
    if(errum!=nil){
        fmt.Println(errum);
    }else{
        fmt.Println(umData);
    }
    
    
}
 

输出

[{"id":1,"name":"John","age":20},{"id":2,"name":"Tom","age":20},{"id":3,"name":"Mary","age":20}]
[
    {
        "id": 1,
        "name": "John",
        "age": 20
    },
    {
        "id": 2,
        "name": "Tom",
        "age": 20
    },
    {
        "id": 3,
        "name": "Mary",
        "age": 20
    }
]
[{1 John 20 } {2 Tom 20 } {3 Mary 20 }]

 

流式处理器例子

package main

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

func main() {
    type Employee struct {
        Id      int    `json:"id"`
        Name    string `json:"name"`
        Age     int    `json:"age"`
        address string `json:"address"`
    }
    //输入下面内容到Stdin
    //[{"id":1,"name":"John","age":20},{"id":2,"name":"Tom","age":20},{"id":3,"name":"Mary","age":20}]

    //用于存储内容的变量
    var umData []Employee

    //从输入流的字符串decode变成变量,输出到umData 
    dec := json.NewDecoder(os.Stdin)
    dec.Decode(&umData)

    //打印到Stdout
    fmt.Println(umData)

    //将umData变量的内容encode转成字符串输出到Stdout
    enc := json.NewEncoder(os.Stdout)
    enc.Encode(umData);

}
 

先输入

[{"id":1,"name":"John","age":20},{"id":2,"name":"Tom","age":20},{"id":3,"name":"Mary","age":20}]

然后得到

[{1 John 20 } {2 Tom 20 } {3 Mary 20 }]
[{"id":1,"name":"John","age":20},{"id":2,"name":"Tom","age":20},{"id":3,"name":"Mary","age":20}]

 

479