加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

golang json 编码解码

发布时间:2020-12-16 09:35:16 所属栏目:大数据 来源:网络整理
导读:json 编码 package mainimport ("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("%sn",b)} else {// 错误处

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("%sn",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,如上面的例子那样

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读