您的位置:首页 > 编程语言 > Go语言

Go语言如何进行json解码和编码双向操作

2018-01-29 17:57 459 查看
main.go

package main

import (
"encoding/json"
"fmt"
"io"
"log"
"os"
"strings"
)

type Employee struct {
ID     int
Name   string
Salary float32
}

func main() {

group := Employee{
ID:     1,
Name:   "ft",
Salary: 7889,
}
fmt.Println("原编码:",group)
//json转码
var jsonBytes []byte = Struct2json(group)
fmt.Print("转码后:")
os.Stdout.Write(jsonBytes)
fmt.Println("")

//解码
group = JsonBytes2Struct(jsonBytes)
fmt.Println("解码后:",group)

//解码json流
fmt.Println("测试json流解码")
JsonStream2Struct()
}

func Struct2json(group interface{}) []byte {

b, err := json.Marshal(group)
if err != nil {
fmt.Println("error:", err)
}
return b
}

//用于解码json数据流
func JsonStream2Struct() {

//初始化一个json格式数据流
const jsonStream = `
{"Name": "Ed", "Text": "Knock knock."}
{"Name": "Sam", "Text": "Who's there?"}
{"Name": "Ed", "Text": "Go fmt."}
{"Name": "Sam", "Text": "Go fmt who?"}
{"Name": "Ed", "Text": "Go fmt yourself!"}
`
//用Message结构来接收单个json对象
type Message struct {
Name, Text string
}

//解码器返回一个装载好内容的Decoder对象
dec := json.NewDecoder(strings.NewReader(jsonStream))
for {
var m Message
//逐一解入临时变量m里
if err := dec.Decode(&m); err == io.EOF {
break
} else if err != nil {
log.Fatal(err)
}
//输出
fmt.Printf("%s: %s\n", m.Name, m.Text)
}
}

//将[]byte型的json流,转换成结构体
func JsonBytes2Struct(bt []byte) Employee {
var result Employee
err := json.Unmarshal(bt, &result)
if err != nil {
panic(err)
}
return result
}


执行结果:

原编码: {1 ft 7889}
转码后:{"ID":1,"Name":"ft","Salary":7889}
解码后: {1 ft 7889}
测试json流解码
Ed: Knock knock.
Sam: Who's there?
Ed: Go fmt.
Sam: Go fmt who?
Ed: Go fmt yourself!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  go语言 编码 json