| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141 |
- package main
- import (
- "bytes"
- "encoding/json"
- "fmt"
- )
- type myStruct struct {
- Name string
- Age int
- Status bool
- Values []int
- }
- func main() {
- // foo1()
- // decodeJson()
- // testJson()
- // foo2()
- annotation()
- }
- func foo1() {
- s := myStruct{
- Name: "John Connor",
- Age: 35,
- Status: true,
- Values: []int{15, 11, 37},
- }
- data, err := json.Marshal(s)
- if err != nil {
- fmt.Println(err)
- return
- }
- fmt.Printf("%s", data)
- newData, err := json.MarshalIndent(s, "", "\t")
- if err != nil {
- fmt.Println(err)
- return
- }
- fmt.Printf("%s", newData)
- }
- func decodeJson() {
- data := []byte(`{"Name":"John Connor","Age":35,"Status":true,"Values":[15,11,37]}`)
- var s myStruct
- if err := json.Unmarshal(data, &s); err != nil {
- fmt.Println(err)
- return
- }
- fmt.Printf("%v", s)
- }
- // Проверка JSON на правильность.
- // Можем проверить является ли срез байтов форматом json.
- func testJson() {
- type user struct {
- Name string
- Email string
- Status bool
- Language []byte
- }
- m := user{Name: "John Connor", Email: "test email"}
- data, _ := json.Marshal(m)
- data = bytes.Trim(data, "{")
- if !json.Valid(data) {
- fmt.Println("invalid json!")
- }
- fmt.Printf("%s", data)
- }
- func foo2() {
- type user struct {
- Name string
- Email string
- Status bool
- Language []byte
- }
- newUser := user{
- Name: "Alex",
- Email: "email@email.email",
- Status: true,
- Language: []byte("ru"),
- }
- data, err := json.Marshal(newUser)
- if err != nil {
- panic(err)
- }
- newUser.Language = []byte("en")
- err = json.Unmarshal(data, &newUser)
- if err != nil {
- panic(err)
- }
- fmt.Println(string(newUser.Language))
- // fmt.Println(data)
- // fmt.Printf("%s", data)
- }
- func annotation() {
- type myStruct struct {
- // при кодировании / декодировании будет использовано имя name, а не Name
- Name string `json:"name"`
- // при кодировании / декодировании будет использовано то же имя (Age),
- // но если значение поля равно 0 (пустое значение: false, nil, пустой слайс и пр.),
- // то при кодировании оно будет опущено
- Age int `json:",omitempty"`
- // при кодировании . декодировании поле всегда игнорируется
- Status bool `json:"-"`
- }
- m := myStruct{Name: "John Connor", Age: 0, Status: true}
- data, err := json.Marshal(m)
- if err != nil {
- fmt.Println(err)
- return
- }
- fmt.Printf("%s", data) //
- }
|