使用simplejson转到JSON

use*_*584 3 json go

尝试使用"github.com/bitly/go-simplejson"中的JSON库

url = "http://api.stackoverflow.com/1.1/tags?pagesize=100&page=1"
res, err := http.Get(url)
body, err := ioutil.ReadAll(res.Body)
fmt.Printf("%s\n", string(body)) //WORKS
js, err := simplejson.NewJson(body)

total,_ := js.Get("total").String()    
fmt.Printf("Total:%s"+total )
Run Code Online (Sandbox Code Playgroud)

但似乎它最有效!尝试访问总计和标记字段

Kav*_*avu 5

你有一些错误:

  1. 如果您检查JSON响应,您会注意到该total字段不是字符串,这就是您在访问该字段时应该使用MustInt()方法的原因String().
  2. Printf()方法调用完全错误.您应该传递一个"模板",然后传递适合"占位符"数量的参数.

顺便说一句,我强烈建议你err != nil到处检查,这对你有很大的帮助.

这是工作示例:

package main

import (
    "fmt"
    "github.com/bitly/go-simplejson"
    "io/ioutil"
    "log"
    "net/http"
)

func main() {
    url := "http://api.stackoverflow.com/1.1/tags?pagesize=100&page=1"
    res, err := http.Get(url)
    if err != nil {
        log.Fatalln(err)
    }

    body, err := ioutil.ReadAll(res.Body)
    if err != nil {
        log.Fatalln(err)
    }

    // fmt.Printf("%s\n", string(body))

    js, err := simplejson.NewJson(body)
    if err != nil {
        log.Fatalln(err)
    }

    total := js.Get("total").MustInt()
    if err != nil {
        log.Fatalln(err)
    }

    fmt.Printf("Total:%s", total)
}
Run Code Online (Sandbox Code Playgroud)

  • "total"赋值之后的错误检查似乎没有检查任何内容,因为MustInt()不会影响`err`的状态. (7认同)