由于要开发一个小型的web应用,而web应用大部分都会使用json作为数据传输的格式,所以有了这篇文章。
包引用
import (
"encoding/json"
"github.com/bitly/go-simplejson" // for json get
)
用于存放数据的结构体
type MyData struct {
Name string `json:"item"`
Other float32 `json:"amount"`
}
这里需要注意的就是后面单引号中的内容。
`json:"item"`
这个的作用,就是Name字段在从结构体实例编码到JSON数据格式的时候,使用item作为名字。算是一种重命名的方式吧。
编码JSON
var detail MyData
detail.Name = "1"
detail.Other = "2"
body, err := json.Marshal(detail)
if err != nil {
panic(err.Error())
}
我们使用Golang自带的encoding/json包对结构体进行编码到JSON数据。
json.Marshal(...)
JSON解码
由于Golang自带的json包处理解码的过程较为复杂,所以这里使用一个第三方的包simplejson进行json数据的解码操作。
js, err := simplejson.NewJson(body)
if err != nil {
panic(err.Error())
}
fmt.Println(js)
完!
来一个完整版:
package main
import (
"fmt"
)
import (
"encoding/json"
"github.com/bitly/go-simplejson" // for json get
)
const (
// flags to malloc
_FlagNoScan = 4 << 1 // GC doesn't have to scan object
)
type MyData struct {
Name string `json:"item"`
Other float32 `json:"amount"`
Test string
}
func main() {
var detail MyData
detail.Name = "1"
detail.Other = 2
detail.Test = "test"
body, err := json.Marshal(detail)
if err != nil {
panic(err.Error())
}
fmt.Println(body)
js, err := simplejson.NewJson(body)
if err != nil {
panic(err.Error())
}
fmt.Println(js)
}
也可以在终端输出和写入文件:
package main
import (
"fmt"
"io/ioutil"
"log"
"os"
"bytes"
)
import (
"encoding/json"
)
type ColorGroup struct {
ID int
Name string
Colors []string
}
func main() {
group := ColorGroup{
ID: 1,
Name: "Reds",
Colors: []string{"Crimson", "Red", "Ruby", "Maroon"},
}
b, err := json.Marshal(group)
if err != nil {
fmt.Println("error:", err)
}
//生成json文件
err = ioutil.WriteFile("test.json", b, os.ModeAppend)
os.Chmod("test.json", 0644);
if err != nil {
return
}
var out bytes.Buffer
err = json.Indent(&out, b, "", "\t")
if err != nil {
log.Fatalln(err)
}
out.WriteTo(os.Stdout)
}
搜索
标签
study
ab
amap
apache
apahe
awk
aws
bat
centos
CFS
chrome
cmd
cnpm
composer
consul
crontab
css
curl
cygwin
devops
di
docker
docker,docker-compose
ethereum
excel
fiddler
fluentd
framework
front-end
git
gitgui
github
glide
go
golang
gorm
grafana
gzip
ioc
item2
iterm2
javascript
jenkins
jsonp
kafka
laradock
laravel
larval
linux
liunux
log
mac
mac, wi-fi
macos
magento
mariaDB
minikube
mongoDB
msp
mysql
netbeans
nginx
nodejs
nohup
npm
nsq
oracle
php
php-fpm
php7
phpstorm
php扩展
Protobuf
python
redis
scp
server
shell
soap
socket
socket5
sql
sre
ssdb
ssh
ssl
study
sublime
swift
system
td-agent
uml
v2ray
vagrant
vagrnat
vim
vpn
vue
vue.js
webpack
webrtc
websocket
webtatic
windows
windows7
word
wps
xdebug
yarn
yii2
yum
zookeeper
世界国家
互联网
以太坊
分类
前端
小程序
打印机
排序算法
搞笑
权限
粤语
缓存
网络
虚拟机
视频
设计模式
项目管理
热门文章
友情链接