はじめに
作っておいて何ですが、コッチの方がいいですね
http://qiita.com/hironobu_s/items/602becd6b7f5995503d6
PHPを使っていてそれからGoを触りだしたらJSONの扱いがなんだか面倒くさい。
静的言語と動的言語の差なんだろうかと諦めてたら、
Swiftは、簡単にする実装とかされてますね・・・
Swiftで面倒なJSONの取り扱いをさらに10倍便利にするclass JSON
Goでやってみました
更にメソッドを追加してerrを返却しない代わりにpanicを起こす AsXXXPanicメソッドを追加しました
より簡単に使えるようになりました
実装例
example.go
package main
import (
"github.com/m0a/easyjson"
"net/http"
"fmt"
)
func main() {
url := "http://maps.googleapis.com/maps/api/directions/json?origin=Boston,MA&destination=Concord,MA&sensor=false"
resp, err := http.Get(url)
if err != nil {
panic(err)
}
if resp.StatusCode != http.StatusOK {
panic(resp.StatusCode)
}
json,err := easyjson.NewEasyJson(resp.Body)
if err!=nil {
panic("json convert err")
}
//easy access!
json.K("routes",0,"bounds","southwest").PrettyPrint()
//support method chain
json.K("routes").K(0).K("bounds").K("southwest").PrettyPrint()
// if use loop
for k,v:=range json.K("routes").K(0).RangeObjects() {
fmt.Printf("%v:%v\n",k,v)
}
//string value
copyrights,err:=json.K("routes").K(0).K("copyrights").AsString()
if err!=nil {
panic("AsString err")
}
fmt.Printf("copyrights=%s",copyrights)
//more easy use
fmt.Printf("copyrights=%s", json.AsStringPanic("routes", 0, "copyrights"))
}
Goには演算子のオーバーロードがないのでK
でアクセスするようにしました
easyjson.NewEasyJson
にio.Readerかstringか
Goのオブジェクト([]interface{}
とmap[string]interface{}
の組み合わせであること)を与えてやると動きます
参考