英文:
How do I get values from an array of json objects based on a condition in golang?
问题
我有一个像这样的数组。
[{
"seq" : 2,
"amnt" : 125
},
{
"seq" : 3,
"amnt" : 25
},
{
"seq" : 2,
"amnt" : 250
}]
我需要从这个数组中获取seq
为2的对象。
在Linq中,我们有扩展方法可以设置条件。
在Go中,我需要通过for
循环遍历并获取它,还是有其他方法?
请给我提供一个最佳的方法。
**注意:**这个JSON有很多字段,对于这个例子,我只给出了两个。
我是Go的新学习者。
英文:
I have an array like this.
[{
"seq" : 2,
"amnt" : 125
},
{
"seq" : 3
"amnt" : 25
},
{
"seq" : 2
"amnt" : 250
}]
I need to fetch objects from this array where seq
is 2.
In Linq we have extensions in which I can put a where condition.
In Go do I need to loop through and get it using for loop
or is there another way?
Please suggest me an optimum way.
Note: The json has many fields, for this example I gave only two.
I'm a new learner of Go.
答案1
得分: 2
我不知道“最佳”方法,但是以下是你现在可以采取的步骤来继续进行:
package main
import (
"encoding/json"
"fmt"
)
func main() {
byt := []byte(`[{"seq": 2,"amnt": 125},{"seq": 3,"amnt": 25},{"seq": 2,"amnt": 250}]`)
var dat []map[string]int
if err := json.Unmarshal(byt, &dat); err != nil {
panic(err)
}
for idx := range dat {
if dat[idx]["seq"] == 2 {
fmt.Println("bingo")
}
}
}
祝你好运。
**编辑:**在我第一个答案中,我假设你可能有非数字值,所以我使用了`interface{}`类型,但在@JimB的建议下,我将其更改为仅寻找`int`类型,因此如果你的JSON数据中有一些`string`或其他类型,解组将失败。
<details>
<summary>英文:</summary>
I dont know about 'optimal' way to do this but here is what you can do for now to move forward:
package main
import (
"encoding/json"
"fmt"
)
func main() {
byt := []byte(`[{"seq": 2,"amnt": 125},{"seq": 3,"amnt": 25},{"seq": 2,"amnt": 250}]`)
var dat []map[string]int
if err := json.Unmarshal(byt, &dat); err != nil {
panic(err)
}
for idx := range dat {
if dat[idx]["seq"] == 2 {
fmt.Println("bingo")
}
}
}
Goodluck.
**Edit:** in my first answer I assumed that you might have non-numeric values so that's why I used `interface{}` type but after @JimB suggestion I changed that to seek only `int` type, so if you have to have some `string` or any other type in you json payload the unmarshaling will fail.
</details>
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论