go - JSON 对象的解码值

标签 go mediawiki mediawiki-api

如果给定字符串,来自 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's json package 获取 edittoken| (请记住 66984 号码会不断变化)?

最佳答案

当你有这样一个不断变化的 key 时,最好的处理方法是使用 map 。在下面的示例中,我一直使用结构,直到我们到达更改键为止。之后我切换到 map 格式。我也链接了一个工作示例。

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))
    }
}

关于go - JSON 对象的解码值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13889745/

相关文章:

go - 有没有办法定义一个函数可以在 Golang 中运行任何回调函数?

regex - 为什么 regexp.FindAllString 会返回带有不需要的空字符串的匹配结果?

php - 如何使用 PHP cURL 登录 mediawiki?

search - 维基百科 API 调用不区分大小写

go - 如何创建具有不同签名的函数片段?

再会!在这个程序中,我制作了包括 Handle 函数的餐厅菜单。我无法将数组 : Name, Price 与函数 getall 和 get 连接起来

java - 写入 MediaWiki : Connection reset by peer

xml - 从维基词典中提取一种语言的最佳方法是什么?

php - 如何通过 php 以编程方式在 MediaWiki 中生成指向页面的链接?

python - 自动解析消歧页面