go隨聊-一個比較好用的json處理包(Jeffail/gabs)
阿新 • • 發佈:2018-11-01
本文介紹一個開源的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
}