duanchen7036
2014-03-05 11:31
浏览 186
已采纳

如何基于golang中的条件从json对象数组中获取值?

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.

图片转代码服务由CSDN问答提供 功能建议

我有一个像这样的数组。

  [{\  n“ seq”:2,
“ amnt”:125 
},
 {
“ seq”:3 
“ amnt”:25 
},
 {
“ seq”:2 \  n“ amnt”:250 
}] 
   
 
 

我需要从此数组中获取对象,其中 seq 为2。

在Linq中,我们有一些扩展名,可以在其中放置where条件。

在Go中,我需要遍历并使用 for循环获取它 还是还有其他方法?

请为我建议一种最佳方法。

注意: json 有很多字段,在这个示例中,我只给出了两个。

我是Go语言的新学习者。

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

1条回答 默认 最新

  • dphj737575 2014-03-05 12:39
    已采纳

    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.

    点赞 评论

相关推荐 更多相似问题