How to Unmarshal the pair values in an nested array by json for Golang

前端 未结 2 1821
北荒
北荒 2021-01-16 15:35

The JSON data like the following:

{\"xxx_xxx\":{\"asks\":[[0.00000315,1022.53968253],[0.00000328,200],[0.00000329,181.70008541]],\"bids\":[[0.00000254,2685.3         


        
相关标签:
2条回答
  • 2021-01-16 15:52

    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 :)

    0 讨论(0)
  • 2021-01-16 15:56

    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
    }
    
    0 讨论(0)
提交回复
热议问题