1. tenntenn

    No comment

    tenntenn
Changes in body
Source | HTML | Preview
@@ -1,55 +1,53 @@
ChromeのDevToolsには、timelineという機能があり、Webアプリのパフォーマンスチューニングに使えます。このtimelineで記録したデータはJSONで保存ができます。
最初はjqを使って解析しようと思いましたが、スクリプトがだんだんと黒魔術臭がしてきました。
そこで、Go言語で解析しようと思ったのですが、正直このJSONのフォーマットがイマイチ分からないので、型が作れません。また、Chromeさんはバージョンがガンガン上がるので、いつフォーマットが変わるか分かりません。その度に型が変わるのは嫌です。
ということで、型を作らずにJSONを解析するライブラリ的なものを作ってみました。
`reflect`パッケージ的な感じに使えます。
* https://github.com/tenntenn/gj
こんな感じで使えます。`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"))
}
-
- return
}
}
```
まだまだ改良の余地がありそうですが、個人で使う分にはいい感じかな。