encoding/json

json 包实现了json对象的编解码

  • 获取v变量的json编码
  • 将json编码的数据存入到解析v变量中
  • 如何实现延时解析
  • 实现标准HTML转义
  • 实现json字符串格式缩进和前缀
  • 剔除编码后数据中的空白字符
  • 结构体json编码选项应用

获取v变量的json编码

func Marshal(v interface{}) ([]byte, error)

package main

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

type User struct {
    Name string
    Age int64
}


func main() {
  user := User{"酷走天涯",27}
  b,error:=json.Marshal(user)
  if error != nil {
      log.Fatal(error)
  }
  fmt.Println(string(b))
}
image.png

将json编码的数据存入到解析v变量中

func Unmarshal(data []byte, v interface{}) error

package main
import (
    "encoding/json"
    "fmt"
     "log"
)

type User struct {
    Name string
    Age int64
}


func main() {
  data := []byte(`{"Name":"酷走天涯","Age":27}`)
  var user *User
  error:=json.Unmarshal(data,&user)
  if error != nil {
      log.Fatal(error)
  }
  fmt.Println(user)
}
image.png

如何实现延时解析

package main

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

type Animal struct {
    Kind string
    Data json.RawMessage
}

type Dog struct{
    Name string
}
type Sheep struct{
    Name string
    Age int
}


func main() {
  data := []byte(`[{"Kind":"Dog","Data":{"Name":"小黄"}},{"Kind":"Sheep","Data":{"Name":"小绵阳","Age":12}}]`)

 // 第一层转换数据
  var animals *[]Animal
  error:=json.Unmarshal(data,&animals)
  if error != nil {
      log.Fatal(error)
  }
// 第二层 跟你kind 类型选择对应的模型进行转换
  for _,c := range *animals{
      var dst  interface{}
      switch c.Kind {
      case "Dog": dst = new(Dog)
      case "Sheep": dst = new(Sheep)
      }
      error := json.Unmarshal(c.Data,dst)
      if error != nil {
          fmt.Println(error)
      }
      fmt.Println(dst)
  }
  fmt.Println(animals)
}
image.png

实现标准HTML转义

func HTMLEscape(dst *bytes.Buffer, src []byte)

HTMLEscape 函数将json编码的src中的<、>、&、U+2028 和U+2029字符替换为\u003c、\u003e、\u0026、\u2028、\u2029 转义字符串,以便json编码可以安全的嵌入HTML的

你可能感兴趣的:(encoding/json)