代码之家  ›  专栏  ›  技术社区  ›  user1050619

在golang中迭代list json对象

go
  •  -1
  • user1050619  · 技术社区  · 6 年前

    我有这段代码来读取json对象。我需要轻松地遍历“outputs”/data/concepts键中的所有元素。

    另外,我如何访问值的属性。即:value.app_id、value.id等

    代码

    package main
    
    import (
        "encoding/json"
        "fmt"
    )
    
    var jsonBytes = []byte(`
    {"outputs": [{
              "data": {"concepts": 
                                     [{"app_id": "main",
                                         "id": "ai_GTvMbVGh",
                                         "name": "ancient",
                                         "value": 0.99875855}]
                  }}
                  ],
     "status": {"code": 10000, "description": "Ok"}}`)
    
    
    func main() {
        var output map[string]interface{}
        err := json.Unmarshal([]byte(jsonBytes), &output)
        if err != nil {
            print(err)
        }
        for _, value := range output["outputs"].([]interface{}) {
            //fmt.Println(value.(map[string]interface{})["data"].(map[string]interface{})["concepts"]).([]interface{})
            //fmt.Println(value.(map[string]interface{})["data"].(map[string]interface{})["concepts"])
            for _, value := range value.(map[string]interface{})["data"].(map[string]interface{})["concepts"].([]interface{}){
                fmt.Println(value)
            }
        }
        //fmt.Printf("%+v\n", output)
    }
    
    1 回复  |  直到 6 年前
        1
  •  0
  •   Or Yaacov    6 年前

    最好的方法是将JSON解组为一个结构并迭代这些值,

    func main() {
    
            var output StructName
    
    
    err := json.Unmarshal([]byte(jsonBytes), &output)
        if err != nil {
            print(err)
        }
        for _, value := range output.Outputs {
            for _, val := range value.Data.Concepts {
                fmt.Printf("AppId:%s\nID:%s\nname:%s\nvalue:%f", val.AppID, val.ID, val.Name, val.Value)
            }
        }
    }
    
    type StructName struct {
        Outputs []struct {
            Data struct {
                Concepts []struct {
                    AppID string  `json:"app_id"`
                    ID    string  `json:"id"`
                    Name  string  `json:"name"`
                    Value float64 `json:"value"`
                } `json:"concepts"`
            } `json:"data"`
        } `json:"outputs"`
        Status struct {
            Code        int    `json:"code"`
            Description string `json:"description"`
        } `json:"status"`
    }