Golang JSON的编码和解析

go JSON解析 JSON编码

编码

定义一个结构体用来放需要进行JSON编码的数据,结构体的字段名必须是大写开头的可导出字段,否则在解析时会解析不出来

使用json.Marshal(v interface{}) ([]byte, error)进行JSON编码

	type Userinfo struct {
		Id       int `json:"id"`
		Username string `json:"username"`
	}
	u := &Userinfo{}
    u.Id = 1
    u.Username = "lauwen"
	j, err := json.Marshal(u)
	if err != nil {
	    fmt.Println(err)
    }
    fmt.Println(string(j))

上述代码输出:

{"id":1,"username":"lauwen"}

解析

使用json.Unmarshal(data []byte, v interface{}) error来进行JSON数据的解析,可以看出第一个参数是[]byte类型数据,所以在使用时需要将字符串类型的JSON数据转换为[]byte类型。
  • 以下使用的解析的JSON字符串都由上一步编码而来,为[]byte类型,无需再转类型。
  • 使用的结构体类型也是上面编码时使用到的结构体,不做重复定义。

JSON解析为结构体

已知JSON结构的时候,可以定义一个结构体来存放JSON解析出来的数据

	var ui Userinfo
	err = json.Unmarshal(j, &ui)
	fmt.Println(ui)

以上代码输出:

{1 lauwen}

JSON解析为map

不清楚JSON数据结构时,可以使用map的来存放JSON解析出来的数据;如下,首先定义了一个map类型数据来接收解析后的JSON数据

	var dj map [string] interface{}
	err = json.Unmarshal(j, &dj)
	fmt.Println(dj)

以上代码输出:

map[id:1 username:lauwen]

完整代码

package main

import (
    "encoding/json"
    "fmt"
)

func main() {
	type Userinfo struct {
		Id       int `json:"id"`
		Username string `json:"username"`
	}
	u := &Userinfo{}
    u.Id = 1
    u.Username = "lauwen"
	j, err := json.Marshal(u)
	if err != nil {
	    fmt.Println(err)
    }
    fmt.Println(string(j))

	var ui Userinfo
	err = json.Unmarshal(j, &ui)
	fmt.Println(ui)

	var dj map [string] interface{}
	err = json.Unmarshal(j, &dj)
	fmt.Println(dj)
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值