Go Lang如何代表Json的类型可以变化

时间:2017-06-13 19:32:26

标签: json go

我需要解组具有可以更改的值的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中声明我的对象?

1 个答案:

答案 0 :(得分:0)

在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)
}

这绝不是一种有效或聪明的方法,我只是很快就把它们搞得一团糟。但我希望它传达了这个概念。