43
39

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Go言語でルーズにJSONを扱えるライブラリJasonが便利だった

Last updated at Posted at 2014-12-03

GoでJSONを扱うとstructとかinterface{}で結構面倒だったしますが、jasonと言うライブラリを使うとかなりルーズに扱えて、ものぐさな私にはちょうど良かったです。

Jason - JSON Library for Go

基本的にはパーサーに特化しているようです。つまり読み込み専用。

単純な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を扱うときには、なかなか良いのではないかと思います。

43
39
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
43
39

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?