如何通过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

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
}

I believe it's because your arrays are structs in Go, but your JSON has arrays of arrays, which aren't the same. You'd want to change [0.00000315,1022.53968253] to {"0": ##, "1": ##}, so on and so forth.

Or, you can have a separate Go struct where Asks is an array of arrays of float64s, etc., but this would be less type safe since arrays could have more or less than 2 elements.

Now, in JS, array elements can be referenced by numerical keys and arrays can be treated as objects, but in JSON, objects and arrays are distinct.

EDIT: add quotations around key names, as specified by the comment below. My mistake :)