本文介绍一个开源的json处理包
Gabs is a small utility for dealing with dynamic or unknown JSON structures in golang. It's pretty much just a helpful wrapper around the golang json.Marshal/json.Unmarshal
behaviour and map[string]interface{}
objects. It does nothing spectacular except for being fabulous.
https://godoc.org/github.com/Jeffail/gabs
How to install:
go get github.com/Jeffail/gabs
构造json
json:=gabs.New()
json.Set(123,"int")
json.Set(123.456,"float")
json.Set("abc","string")
fmt.Println(json.String())
----------------------------------
{
"float": 123.456,
"int": 123,
"string": "abc"
}
解析json
json:=gabs.New()
json.Set(123,"int")
json.Set(123.456,"float")
json.Set("abc","string")
str:=json.String()
//解析
jsonParse,err:=gabs.ParseJSON([]byte(str))
if err!=nil {
fmt.Println(err)
return
}
if jsonParse.Exists("int") {
i:=jsonParse.Path("int").Data().(float64)
fmt.Println("int:",i)
}
if jsonParse.Exists("float") {
f:=jsonParse.Path("float").Data().(float64)
fmt.Println("float:",f)
}
if jsonParse.Exists("string") {
s:=jsonParse.Path("string").Data().(string)
fmt.Println("string:",s)
}
------------------------------------------------------
int: 123
float: 123.456
string: abc
构建数组
json:=gabs.New()
json.Array("array")
item1:=gabs.New()
item1.Set("1","id")
json.ArrayAppend(item1.Data(),"array")
item2:=gabs.New()
item2.Set("2","id")
json.ArrayAppend(item2.Data(),"array")
item3:=gabs.New()
item3.Set("3","id")
json.ArrayAppend(item3.Data(),"array")
fmt.Println(json.String())
-------------------------------------
{
"array": [{
"id": "1"
}, {
"id": "2"
}, {
"id": "3"
}]
}
解析数组
//构建数组
json:=gabs.New()
json.Array("array")
item1:=gabs.New()
item1.Set("1","id")
json.ArrayAppend(item1.Data(),"array")
item2:=gabs.New()
item2.Set("2","id")
json.ArrayAppend(item2.Data(),"array")
item3:=gabs.New()
item3.Set("3","id")
json.ArrayAppend(item3.Data(),"array")
//解析json
jsonParse, _ := gabs.ParseJSON([]byte(json.String()))
count,err:=jsonParse.ArrayCount("array")
if err!=nil {
fmt.Println(err)
return
}
//遍历数组
for index:=0;index<count;index++{
item,err:=jsonParse.ArrayElement(index,"array")
if err!=nil {
fmt.Println(err)
return
}else{
fmt.Println(item.String())
}
}
--------------------------------------------
{"id":"1"}
{"id":"2"}
{"id":"3"}
从二进制解析json
str:="{\"id\":123}"
//直接从二进制解析json
json,err:=gabs.ParseJSON([]byte(str))
if err!=nil {
fmt.Println(err)
return
}else{
fmt.Println(json.String())
}
--------------------------------------------
{
"id": 123
}