dongtan8122 2017-03-19 22:18
浏览 24
已采纳

如何通过JSON为Golang解组嵌套数组中的对值

The JSON data like the following:

{"xxx_xxx":{"asks":[[0.00000315,1022.53968253],[0.00000328,200],[0.00000329,181.70008541]],"bids":[[0.00000254,2685.36319716],[0.00000253,600],[0.0000025,1000]]}}

the struct as:

type Depth struct {
    XXX_XXX struct {
        Asks []struct {
            Num0 float64 `json:"0"`
            Num1 float64 `json:"1"`
        } `json:"asks"`
        Bids []struct {
            Num0 float64 `json:"0"`
            Num1 float64 `json:"1"`
        } `json:"bids"`
    } `json:"xxx_xxx"`
}

when try to map in go-lang as following:

json.Unmarshal(r, &depth)

will get all zero arrays like following:

{{[{0 0} {0 0} {0 0} ] [{0 0} {0 0} {0 0} ]}}

It does not come up the result as I expected. How to solve this problem?

HERE is the code on playground: https://play.golang.org/p/wxFV6Mv26t

  • 写回答

2条回答 默认 最新

  • doumeng1143 2017-03-19 22:35
    关注

    Asks and bids are array types not struct types.

    Here is a working playground example

    Below is an example that adds a Nums type that has a One and Two method you can use since those seem to be the format you are expecting. You could add some error checking in these methods to ensure the format is correct too.,

    type Depth struct {
        XXX XXX `json:"xxx_xxx"`
    }
    
    type XXX struct {
        Asks []Nums `json:"asks"`
        Bids []Nums `json:"bids"`
    }
    
    type Nums []float64
    
    func (n Nums) One() float64 {
        if len(n) > 0 {
             return n[0]
        }
        return 0
    }
    
    func (n Nums) Two() float64 {
        if len(n) > 1 {
            return n[1]
        }
        return 0
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?