[Go言語] JSONを解析するのに、型作るのはめんどい
February 3, 2014
この記事はQiitaの記事をエクスポートしたものです。内容が古くなっている可能性があります。
ChromeのDevToolsには、timelineという機能があり、Webアプリのパフォーマンスチューニングに使えます。このtimelineで記録したデータはJSONで保存ができます。 最初はjqを使って解析しようと思いましたが、スクリプトがだんだんと黒魔術臭がしてきました。
そこで、Go言語で解析しようと思ったのですが、正直このJSONのフォーマットがイマイチ分からないので、型が作れません。また、Chromeさんはバージョンがガンガン上がるので、いつフォーマットが変わるか分かりません。その度に型が変わるのは嫌です。
ということで、型を作らずにJSONを解析するライブラリ的なものを作ってみました。
reflect
パッケージ的な感じに使えます。
こんな感じで使えます。ResourceSendRequest
レコードを羅列する例です。
package main
import (
"github.com/tenntenn/gj"
"fmt"
"io/ioutil"
"os"
)
func main() {
jsonStr, _ := ioutil.ReadAll(os.Stdin)
v, _ := gj.New(jsonStr)
traversal(v.Slice(1, v.Len()))
}
func traversal(v *gj.Value) {
if v.IsArray() {
v.EachIndex(func(i int, v *gj.Value) {
traversal(v)
})
return
}
if v.IsObject() {
if v.Has("type") && v.Get("type").String() == "ResourceSendRequest" {
fmt.Println(v.Get("data").Get("url").String())
}
if v.Has("children") {
traversal(v.Get("children"))
}
}
}
まだまだ改良の余地がありそうですが、個人で使う分にはいい感じかな。