【问题标题】:Golang: Getting only one object in a JSON collection responseGolang:在 JSON 集合响应中只获取一个对象
【发布时间】:2023-02-03 10:48:08
【问题描述】:

假设我有一个如下所示的 JSON 响应主体:

{
   value: [{Object A's key-values}, {Object B's key-values}, {Object C's key-values} ...]
}

其中对象 A、B、C 具有不同的结构,尽管它们可能具有相同的键名。 (例如,Obj A 和 B 都可以有键“b”,但只有 Obj A 有键“a”)

我只对 JSON 响应中的对象 A 感兴趣,其余的可以丢弃。如果我有这样的结构:

type MyObject struct{
    a string
    b string
}

type MyData struct{
   value []MyObject
}

将响应解组到 MyData 中是否有效?我们能否指定一个特定类型的切片,以便只有具有正确结构的所需元素被解组,而 JSON 集合中的其余对象被忽略?

【问题讨论】:

标签: json rest go struct unmarshalling


【解决方案1】:

首先:您需要导出结构成员:

type MyObject struct{
    A string `json:"a"`
    B string `json:"b"`
}
type MyData struct{
   Value []MyObject `json:"value"`
}

然后,您可以使用以下方法解组数组:

var v MyData
json.Unmarshal(input,&v)

这将为输入中的每个数组元素创建一个 MyObject 实例,但只会填充那些具有 ab 字段的实例。因此,您可以过滤包含a的那些:

for _,x:=range v.Values {
   if x.A!="" {
     ///
   }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-02-12
    • 1970-01-01
    • 2014-05-31
    • 2023-03-21
    • 2013-08-07
    • 1970-01-01
    • 1970-01-01
    • 2016-06-25
    相关资源
    最近更新 更多