GoでJSONを扱うとstructとかinterface{}で結構面倒だったしますが、jasonと言うライブラリを使うとかなりルーズに扱えて、ものぐさな私にはちょうど良かったです。
基本的にはパーサーに特化しているようです。つまり読み込み専用。
単純なJSONだと
package main
import (
"github.com/antonholmquist/jason"
"github.com/kr/pretty"
)
func main() {
root, err := jason.NewFromString(`{ "hoge": "fuga" }`)
if err != nil {
panic(err)
}
pretty.Printf("%v", root.Get("hoge").String())
}
出力は
fuga
もう少し複雑なJSONとして、お天気サービスのREST APIを叩いてみます。ネストしたノードの値も、簡単にとれました。
お天気Webサービス仕様 - Weather Hacks - livedoor 天気情報
package main
import (
"github.com/antonholmquist/jason"
"github.com/kr/pretty"
"net/http"
)
func main() {
url := "http://weather.livedoor.com/forecast/webservice/json/v1?city=130010"
resp, err := http.Get(url)
if err != nil {
panic(err)
}
defer resp.Body.Close()
root, err := jason.NewFromReader(resp.Body)
if err != nil {
panic(err)
}
// ネストした値を取得する
pretty.Printf("%#v", root.Get("description", "text").String())
}
出力は以下。
" 日本付近は、冬型の気圧配置となっています。\n\n【関東甲信地方】\n 関東甲信地方はおおむね晴れていますが、長野県では雪や雨の降っている\n所があります。\n\n 3日は、日本付近は冬型の気圧配置で、関東甲信地方はおお むね晴れます\nが、長野県の山沿いでは、雪や雨の降る所があるでしょう。\n\n 4日は、日本の南に前線がのびて、その前線上に低気圧が発生する見込み\nです。関東甲信地方は曇りから次第に雨が降り出すでしょう。長野県や関東\n地方の山沿いでは雨や雪となる所もある見込みです。\n \n 関東近海では、3日はうねりを伴いしける見込みです。4日はうねりを伴\nいやや波が高い見込みです。船舶は高波に注意してください。\n\n【東京地方】\n 3日は、晴れでしょう。\n 4日は、曇りで昼過ぎから夕方は雨が降るでしょう。"
とても簡単でした。
最後のString()は、もちろんNumber()とかBoolean()とかArray()があります。
キーが存在するかを調べるときはHas()を使います。
開発中とかでちょっとJSONを扱うときには、なかなか良いのではないかと思います。