【问题标题】:Go Lang how do represent Json with types that can vary [duplicate]Go Lang 如何用可以变化的类型表示 Json [重复]
【发布时间】:2017-06-13 19:32:25
【问题描述】:

我需要解组具有可以更改的值的 json 对象。例如,一个典型的对象会定义以下属性:

{
    "entityName": "example Property",
    "properties": [
        {
            "name": "property1",
            "type": "string",
            "value": "Test Value"
        },
        {
            "name": "property2",
            "type": "float",
            "value": "12.5"
        },
        {
            "name": "property3",
            "type": "integer",
            "value": 1
        }
    ]
}

每个属性都将自己声明为需要解组的类型。我已经使用泛型在 Java 中解决了这个问题,但我不确定如何在 Go 中声明我的对象?

【问题讨论】:

    标签: json go


    【解决方案1】:

    在 go 中,您会使用 JSON 库将 JSON 编码的数据解析为结构。因此,对于您的示例,假设您正在从网页获取数据。

    package main
    
    import (
        "encoding/json"
        "fmt"
        "net/http"
        "io/ioutil"
    )
    
    type Payload struct {
        EntityName string
        properties Properties
    }
    
    type Properties struct{
        name string
        type string
        value string
    
    }
    
    
    func main() {
        url := "some site where data is stored"
        res, err  := http.Get(url)
        if err != nil {
            panic (err)
        } 
        defer res.Body.Close()
    
        body, err := ioutil.ReadAll(res.Body)
        if err != nil {
            panic(err)
        }
    
        var p Payload
    
        err = json.Unmarshal(body, &p)
        if err != nil{
           panic (err)
        }
    
        fmt.Println(p.EntityName\n, p.properties)
    }
    

    这绝不是一种有效或聪明的方法,我只是迅速将其破解。但我希望它传达了这个概念。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-12
      • 2014-09-25
      • 2023-04-04
      • 1970-01-01
      • 2014-06-16
      • 1970-01-01
      • 2016-03-11
      • 1970-01-01
      相关资源
      最近更新 更多