当前位置:首页 > golang中的json解析

golang中的json解析

发布于 2018-04-11 阅读 358 次 Golang

简介

golang 原生提供了 encoding/json 的json处理包
而此次准备通过github 的第三方包(github.com/pquerna/ffjson/ffjson)来处理json的编解码

json 解码

首先我们构建一个常用的接口返回的json数据格式

//某api接口返回数据:
{
    "code": 200,
    "msg": "success",
    "data": {
        "title": "w2le",
        "content": "golang中的json解析",
        "url": "www.w2le.com"
    }
} 

main.go

package main

import (
    "fmt"
    "github.com/pquerna/ffjson/ffjson"
)

type (
    //定义外层response结构体
    Response struct {
        Code int    `json:"code"`
        Msg  string `json:"msg"`
        Data Data   `json:"data"` //嵌套Data 结构体
    }

    //定义Data层结构体
    Data struct {
        Title   string `json:"title"`
        Content string `json:"content"`
        Url     string `json:"url"`
    }
)

func main() {
    data := "{\"code\": 200,\"msg\": \"success\", \"date\": {\"title\": \"w2le\", \"content\":  \"golang\u4e2d\u7684json\u89e3\u6790\", \"url\": \"www.w2le.com\"}}"
    res := &Response{}
    ffjson.Unmarshal([]byte(data), res)

    fmt.Println(res)
}

// output : &{200 success {w2le golang中的json解析 www.w2le.com}} 

Golang解析json时候,多维数组需要一层一层定义数据结构,然后嵌套
json:"field"用来指定解析字段field

json 编码

main.go

func main() {

    r, err := ffjson.Marshal(res)

    if err != nil {
    log.Println(err)
    }

    fmt.Println(string(r))
}

//output :  {"code":0,"msg":"success","date":{"title":"w2le","content":"golang中的json解析","url":"www.w2le.com"}}

ffjson.Marshal(res) 返回的数据(r) 是 []byte类型