キーが変動するJsonをパースしたい
例えば、下記URL(MediaWiki API)にあるようなJsonのキーの値が数字になっていて変動するものはどのようにパースすればいいのでしょうか。
レスポンス
{
"continue": {
"clcontinue": "2222571|小学館の学年誌の漫画作品",
"continue": "||"
},
"query": {
"pages": {
// このキーが変動する
"2222571": {
"pageid": 2222571,
"ns": 0,
"title": "ドラえもん",
"categories": [
{
"ns": 14,
"title": "Category:SF漫画作品"
},
{
"ns": 14,
"title": "Category:いたずら・ぶっく"
},
{
"ns": 14,
"title": "Category:めばえ"
},
{
"ns": 14,
"title": "Category:コロコロコミックの漫画作品"
},
{
"ns": 14,
"title": "Category:タイムトラベルを題材とした漫画作品"
},
{
"ns": 14,
"title": "Category:ドラえもん"
},
{
"ns": 14,
"title": "Category:ネコを主人公にした物語"
},
{
"ns": 14,
"title": "Category:出典を必要とする記述のある記事/2010年11月"
},
{
"ns": 14,
"title": "Category:外部リンクがリンク切れになっている記事/2015年4月"
},
{
"ns": 14,
"title": "Category:小学校を舞台とした漫画作品"
}
]
}
}
}
}
できればGolangでのやり方をお教えいただけると助かりますが、他の言語での方法でも構いません。
ちなみに自分は下記コードでできると考え実行しましたができませんでした。何か方法があるのであれば教えて下さい。
私が考えたコード
package main
import (
"fmt"
"github.com/bitly/go-simplejson"
"io/ioutil"
"net/http"
"net/url"
)
func main() {
values := url.Values{}
values.Add("format", "json")
values.Add("action", "query")
values.Add("prop", "categories")
values.Add("titles", "ドラえもん")
resp, err := http.Get("https://ja.wikipedia.org/w/api.php?" + values.Encode())
if err != nil {
fmt.Println(err)
}
defer resp.Body.Close()
rf, err := ioutil.ReadAll(resp.Body)
if err != nil {
fmt.Println(err)
}
js, err := simplejson.NewJson(rf)
if err != nil {
fmt.Println(err)
}
pageID := js.Get("query").Get("pages")
fmt.Println(pageID)
category, err := pageID.Get("categories").GetIndex(1).Get("title").String()
if err != nil {
fmt.Println(err)
}
fmt.Println(category)
}