4

文字列が与えられた場合、MediaWiki APIリクエストから:

str = ` {
    "query": {
        "pages": {
            "66984": {
                "pageid": 66984,
                "ns": 0,
                "title": "Main Page",
                "touched": "2012-11-23T06:44:22Z",
                "lastrevid": 1347044,
                "counter": "",
                "length": 28,
                "redirect": "",
                "starttimestamp": "2012-12-15T05:21:21Z",
                "edittoken": "bd7d4a61cc4ce6489e68c21259e6e416+\\"
            }
        }
    }
}`

Goのjsonパッケージを使用してedittokenを取得するにはどうすればよいですか(66984番号は継続的に変更されることに注意してください)。

4

2 に答える 2

5

このように変化するキーがある場合、それに対処する最善の方法はマップを使用することです。以下の例では、変化するキーに到達するまで構造体を使用しています。その後、地図形式に切り替えました。実例もリンクしました。

http://play.golang.org/p/ny0kyafgYO

package main

import (
    "fmt"
    "encoding/json"
    )

type query struct {
    Query struct {
        Pages map[string]interface{}
    }
}


func main() {
    str := `{"query":{"pages":{"66984":{"pageid":66984,"ns":0,"title":"Main Page","touched":"2012-11-23T06:44:22Z","lastrevid":1347044,"counter":"","length":28,"redirect":"","starttimestamp":"2012-12-15T05:21:21Z","edittoken":"bd7d4a61cc4ce6489e68c21259e6e416+\\"}}}}`

    q := query{}
    err := json.Unmarshal([]byte(str), &q)
    if err!=nil {
        panic(err)
    }
    for _, p := range q.Query.Pages {
        fmt.Printf("edittoken = %s\n", p.(map[string]interface{})["edittoken"].(string))
    }
}
于 2012-12-15T06:17:31.747 に答える
4

API リクエスト URL でパラメータを使用する場合&indexpageids=true、結果には次のように「pageids」配列が含まれることに注意してください。

str = ` {
    "query": {
        "pageids": [
            "66984"
        ],
        "pages": {
            "66984": {
                "pageid": 66984,
                "ns": 0,
                "title": "Main Page",
                "touched": "2012-11-23T06:44:22Z",
                "lastrevid": 1347044,
                "counter": "",
                "length": 28,
                "redirect": "",
                "starttimestamp": "2012-12-15T05:21:21Z",
                "edittoken": "bd7d4a61cc4ce6489e68c21259e6e416+\\"
            }
        }
    }
}`

を使用pageids[0]して、継続的に変化する番号にアクセスできます。これにより、作業が容易になる可能性があります。

于 2012-12-15T12:59:09.173 に答える