英文:
Golang: Getting only one object in a JSON collection response
问题
假设我有一个类似以下结构的JSON响应体:
{
value: [{对象A的键值对}, {对象B的键值对}, {对象C的键值对} ...]
}
其中对象A、B、C具有不同的结构,尽管它们可能具有相同的键名(例如,对象A和B都可能具有键"b",但只有对象A具有键"a")。
我只对JSON响应中的对象A感兴趣,其余部分可以丢弃。如果我有以下结构:
type MyObject struct{
a string
b string
}
type MyData struct{
value []MyObject
}
将响应解组成MyData结构是否可行?我们是否可以指定一个特定类型的切片,以便只有具有正确结构的所需元素被解组,而JSON集合中的其他对象被忽略?
英文:
Suppose I have have a JSON response body that looks something like this:
{
value: [{Object A's key-values}, {Object B's key-values}, {Object C's key-values} ...]
}
Where Object A, B, C are of different structures, although they may have same key names. (e.g. both Obj A and B could have the key "b", but only Obj A has the key "a")
I am only interested in Object A from the JSON response, the rest can be discarded. If I have a structure like this:
type MyObject struct{
a string
b string
}
type MyData struct{
value []MyObject
}
Will unmarshalling the response into MyData work? Can we specify a slice of a particular type such that only the desired element with the correct structure gets unmarhshalled and the rest of the objects in the JSON collection gets ignored?
答案1
得分: 2
首先,你需要导出结构体成员:
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
实例,但只有那些具有a
和b
字段的实例将被填充。因此,你可以筛选包含a
的实例:
for _, x := range v.Value {
if x.A != "" {
///
}
}
英文:
First: you need to export struct members:
type MyObject struct{
A string `json:"a"`
B string `json:"b"`
}
type MyData struct{
Value []MyObject `json:"value"`
}
Then, you can unmarshal the array using:
var v MyData
json.Unmarshal(input,&v)
This will create a MyObject
instance for every array element in the input, but only those that have a
and b
fields will be populated. Thus, you can filter the ones containing a
:
for _,x:=range v.Values {
if x.A!="" {
///
}
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论