为了账号安全,请及时绑定邮箱和手机立即绑定

可以在 Go 中获取 JSON 的值

可以在 Go 中获取 JSON 的值

Go
蓝山帝景 2023-05-08 18:06:04
我是 Go 的新手。我正在尝试读取一个 JSON 文件并获取其中的一部分,然后使用获得的值进行操作。我的 JSON 在文件 example.json 中:{"results":[{"statement_id":0,"series":[{"name":"cpu/node_utilization","columns":["time","distinct"],"values":[[10,1],[11,3],[13,5]]}]}]}所以我想得到的是获取所有元素总和的“值”。在这种情况下:1+3+5这是我的代码。我可以得到结果,但后来我没能得到系列。这是我的代码:package mainimport (    "encoding/json"    "fmt"    "io/ioutil"    "os")func main() {    // Open our jsonFile    jsonFile, err := os.Open("example.json")    // if we os.Open returns an error then handle it    if err != nil {        fmt.Println(err)    }    fmt.Println("Successfully Opened example.json")    // defer the closing of our jsonFile so that we can parse it later on    defer jsonFile.Close()    byteValue, _ := ioutil.ReadAll(jsonFile)    var all_data map[string]interface{}    json.Unmarshal([]byte(byteValue), &all_data)    fmt.Println(all_data["results"])}我尝试过不同的解决方案,例如 all_data["results"].(map[string]interface{})["series"]) 但问题是地图在数组中,我不知道如何解决。
查看完整描述

2 回答

?
喵喔喔

TA贡献1735条经验 获得超5个赞

使用界面和地图


package main


import (

    "encoding/json"

    "fmt"

)


func main() {


    byteValue := []byte(`{"results":[{"statement_id":0,"series":[{"name":"cpu/node_utilization","columns":["time","distinct"],"values":[[10,1],[11,3],[13,5]]}]}]}`)


    var all_data map[string][]interface{}

    json.Unmarshal([]byte(byteValue), &all_data)

    fmt.Println("result:", all_data["results"])


    for _, r := range all_data["results"] {

        s := r.(map[string]interface{})

        fmt.Println("series:", s["series"])


        w := s["series"].([]interface{})

        for _, x := range w {

            y := x.(map[string]interface{})

            fmt.Println(y)


            z := y["values"].([]interface{})

            fmt.Println("values:", z)

            for _, v := range z {

                u := v.([]interface{})

                fmt.Println(u)

                for _, i := range u {

                    val := i.(float64)

                    fmt.Println(val)

                }

            }

        }

    }

}


查看完整回答
反对 回复 2023-05-08
?
慕妹3146593

TA贡献1820条经验 获得超9个赞

我已经解决了定义结构的问题。


package main


import (

"encoding/json"

"fmt"

"io/ioutil"

"os"

)



type AutoGenerated struct {

    Results []struct {

        StatementID int `json:"statement_id"`

        Series      []struct {

            Name    string   `json:"name"`

            Columns []string `json:"columns"`

            Values  [][]int  `json:"values"`

        } `json:"series"`

    } `json:"results"`

}


func main() {

    // Open our jsonFile

jsonFile, err := os.Open("example.json")

// if we os.Open returns an error then handle it

if err != nil {

    fmt.Println(err)

}

fmt.Println("Successfully Opened example.json")

// defer the closing of our jsonFile so that we can parse it later on

defer jsonFile.Close()



byteValue, _ := ioutil.ReadAll(jsonFile)

all_data := AutoGenerated{}

json.Unmarshal([]byte(byteValue), &all_data)

fmt.Println(all_data.Results[0].Series[0].Values)

}



查看完整回答
反对 回复 2023-05-08
  • 2 回答
  • 0 关注
  • 258 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信