码迷,mamicode.com
首页 > Web开发 > 详细

golang json 编码解码

时间:2018-06-17 12:39:34      阅读:182      评论:0      收藏:0      [点我收藏+]

标签:error   解码   参数   %s   返回   lse   字段   hal   fun   

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\n", 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 编码解码

标签:error   解码   参数   %s   返回   lse   字段   hal   fun   

原文地址:https://www.cnblogs.com/eleven24/p/9192481.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!