前言:go语言原生的json数据处理包encoding/json实在太恶心人了,要求每使用一个json就必须定义一个对应的结构体。有时候处理接口返回数据时,json结构很复杂,原生的包无法满足我们的需要。故引入了gitlab上的一个工具包simplejson。
1. 安装
go get github.com/bitly/go-simplejson
2. 引入
import (
simplejson "github.com/bitly/go-simplejson"
)
case1 基础使用-数据解析
func case1() {
//初始化*simpleJson.Json对象
sj, err := simplejson.NewJson([]byte(jsonStr))
var v *simpleJson.Json
//获取字段,如果有多级,可以层层嵌套获取
v = sj.Get(字段名1).Get(字段名2)
//将v的值转化为具体类型的值,MustXXX方法一定可以转化成功
//若转化不成功,则转化为该类型的零值
result := v.MustString()
}
case2 检查key是否存在
func case2() {
//检查某个字段是否存在
_, ok := js.Get("字段名1").CheckGet("字段名2")
if ok {
fmt.Println("存在!")
} else {
fmt.Println("不存在")
}
}
case3 处理json数组
func case3(){
personArr, err :=js.Get("persons").Array() //拿到json数组
fmt.Println(len(personArr))
// 遍历
for i, _ := range personArr {
//fmt.Println(i, v)
person := js.Get("person").GetIndex(i)
name := person.Get("name").MustString()
age := person.Get("age").MustInt()
email := person.Get("email").MustString()
fmt.Printf("name=%s, age=%d, email=%s\n", name, age, email)
}
case4 创建json数据
package main
import (
"encoding/json"
"fmt"
"github.com/bitly/go-simplejson" // for json get
)
var jsonStr = `
{
"person": [{
"name": "piao",
"age": 30,
"email": "piaoyunsoft@163.com",
"phoneNum": [
"13974999999",
"13984999999"
]
}, {
"name": "aaaaa",
"age": 20,
"email": "aaaaaa@163.com",
"phoneNum": [
"13974998888",
"13984998888"
]
}, {
"name": "bbbbbb",
"age": 10,
"email": "bbbbbb@163.com",
"phoneNum": [
"13974997777",
"13984997777"
]
}]
}
`
func main() {
js, err := simplejson.NewJson([]byte(jsonStr))
if err != nil {
panic(err.Error()) //抛出异常
}
personArr, err := js.Get("person").Array()
fmt.Println(len(personArr))
// 遍历
for i, _ := range personArr {
//fmt.Println(i, v)
person := js.Get("person").GetIndex(i)
name := person.Get("name").MustString()
age := person.Get("age").MustInt()
email := person.Get("email").MustString()
fmt.Printf("name=%s, age=%d, email=%s\n", name, age, email)
// 读取手机号
phoneNumArr, _ := person.Get("phoneNum").Array()
for ii, vv := range phoneNumArr {
fmt.Println(ii, vv)
}
}
// make a json string 0
if true {
jData := make(map[string]interface{})
var persionArray []interface{}
for i := 0; i < 2; i++ {
persion := make(map[string]interface{})
if true {
persion["name"] = "piao"
persion["age"] = 30
persion["email"] = "piao1@email"
if true {
var phoneNumArray []interface{}
phoneNumArray = append(phoneNumArray, "13793135326")
phoneNumArray = append(phoneNumArray, "13793135327")
persion["phoneNum"] = phoneNumArray
}
}
persionArray = append(persionArray, persion)
}
jData["persion"] = persionArray
c, _ := json.Marshal(jData)
fmt.Println(string(c))
}
}