golang json 编码解码

Posted 白桂任的博客

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了golang json 编码解码相关的知识,希望对你有一定的参考价值。

json 编码

package main

import (
	"encoding/json"
	"fmt"
)

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

func main()  {
	person := Person{"ruby", 24}

	b, err := json.Marshal(&person)
	if err == nil {
		fmt.Printf("%s
", b)
	} else {
		// 错误处理
	}
}

  

关键方法 json.Marshal:

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

  这个方法返回的结果是一个字节数组,如果需要转字符串,可以 string(xxx),如:

fmt.Println(string(b))

  

json 解码

package main

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

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

func main() {
	// 需要解码的 json 字符串
	str := `
		{"name":"ruby","age":24}
	`

	// json decoder 对象, 有个 Decode 方法, 接受一个 struct 参数
	decoder := json.NewDecoder(strings.NewReader(str))
	var person Person
	err := decoder.Decode(&person)
	if err == nil {
		fmt.Println(person.Name)
		fmt.Println(person.Age)
	}
}

  

写成一行就是(str 是需要解码的字符串,v 是结构体变量,需要解码成什么 struct 就定义什么 struct 变量):

json.NewDecoder(strings.NewReader(str)).Decode(v)

 

  

常见问题:

1、为什么我定义了一个 struct,但是使用 json.Marshal 方法编码之后返回的是空的 byte[] ?

可能原因:struct 里面使用了小写的的字段名,如

type Person struct {
    name string
    age int
}

  需要把 字段名转为 驼峰命名,如果需要编码之后的字段名是小写的,可以给 struct 加个 tag,如上面的例子那样

 

以上是关于golang json 编码解码的主要内容,如果未能解决你的问题,请参考以下文章

golang json 编码解码

golang 使用Go的net / http包对JSON进行编码和解码

GoLang读写数据---下

Golang处理JSON--- 解码

编程实践Golang 实现 Yaml编码和解码

Golang✔️走进 Go 语言✔️ 第二十二课 json & 文件读写