如何从golang中的json中获取特定值

时间:2018-10-25 14:53:06

标签: json http go

不太确定如何访问我感兴趣的值。我所得到的是来自我的ouchDB的响应,如下所示:

response from couchDB in json format

我感兴趣的是使用golang找出“名称”和“电话”值。

如果我运行这段代码,至少要知道id或key的值:

package main

import(
    "net/http"
    "encoding/json"
    "io/ioutil"
    "fmt"
)

type rows struct{
    Rows []info `json:"rows"`
}

type info struct{
    Name string `json:"id"`
}


func main() {
    resp, err := http.Get("http://localhost:5984/mydb/_all_docs?include_docs=true")
    bytes, _ := ioutil.ReadAll(resp.Body)
    if err != nil {
        fmt.Println(err)
        return
    }

    var d rows
    json.Unmarshal(bytes, &d)
    fmt.Println(d)
}

Output from script

所以我尝试用这种方法来获得入门的“名称”:

package main

import(
    "net/http"
    "encoding/json"
    "io/ioutil"
    "fmt"
)

type rows struct{
    Rows []doc `json:"rows"`
}

type doc struct {
  Values []info `json:"doc"`
}

type info struct{
    Name string `json:"name"`
}


func main() {
    resp, err := http.Get("http://localhost:5984/mydb/_all_docs?include_docs=true")
    bytes, _ := ioutil.ReadAll(resp.Body)
    if err != nil {
        fmt.Println(err)
        return
    }

    var d rows
    json.Unmarshal(bytes, &d)
    fmt.Println(d)
}

但是得到这个回应: Output from script

我对golang还是很陌生,但是我真的想学习如何用它构建简单的API,如果还有其他方法可以在golang中进行操作,请告诉我

1 个答案:

答案 0 :(得分:2)

这是我要解决这个问题的方式

1)获取示例json输出并访问网站 https://mholt.github.io/json-to-go/

使用它来自动生成与您的数据匹配的结构 您可能需要调整生成“行”结构的方式

2)使用您刚设计的结构,使用Unmarshall加载数据

3)转储具有%v Printf格式的数据以进行查看,然后找出如何获取名称和电话元素

您将在此处获得一些示例代码,但是示例数据在图片中,因此重现非常耗时:对不起:/