2014-03-05 42 views
-2

我有一个这样的数组。如何根据golang中的条件从json对象数组中获取值?

[{ 
    "seq" : 2, 
    "amnt" : 125 
}, 
{ 
    "seq" : 3 
    "amnt" : 25 
}, 
{ 
    "seq" : 2 
    "amnt" : 250 
}] 

我需要从这个数组提取物,其中seq为2

在LINQ我们必须扩展中,我可以把一个地方的条件。

在去我需要循环,并得到它使用for loop还是有另一种方式?

请给我一个最佳的方法。

注意:该json有很多领域,对于这个例子,我只给了两个。

我是Go的新学员。

+0

for循环有什么问题? (无论如何,Linq将不得不这样做)。 – JimB

+0

这是shan询问这段代码的第四个问题,但仍然拒绝将其重构为惯用的Go。它在什么时候被认为是垃圾邮件? –

+0

@SethHoenig对不起,我没有得到你.. – shanmugharaj

回答

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型我的第一个答案,所以,如果你必须有一些string或其他任何类型的json负载解组将失败。

+3

你可以简单地通过声明你需要解组的类型而不是使用'interface {}'来使它“最优”。 – JimB

+0

@JimB我认为他可能有其他类型的JSON有效载荷,但我会改变它。 – ymg

+0

我只是想强调for循环不是非最优的部分。 OP似乎认为,因为循环需要几行代码才能写,所以它在某种程度上不如高级语言功能。 – JimB

相关问题