1. 程式人生 > >go隨聊-一個比較好用的json處理包(Jeffail/gabs)

go隨聊-一個比較好用的json處理包(Jeffail/gabs)

本文介紹一個開源的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
}