繁体   English   中英

如何获取界面切片中元素的值?

[英]How do i get values of elements in slice of interface?

我有以下结构

type response struct {
        Symbols    []struct {
                Status                     string   `json:"status"`
                Symbol                     string   `json:"symbol"`
                BaseAssetPrecision      int64  `json:"baseAssetPrecision"`
                BaseCommissionPrecision int64  `json:"baseCommissionPrecision"`
                Filters                 []struct {
                        FilterType string  `json:"filterType"`
                        MaxPrice   float64 `json:"maxPrice,string"`
                        MinPrice   float64 `json:"minPrice,string"`
                        TickSize   float64 `json:"tickSize,string"`
                } `json:"filters"`
        } `json:"symbols"`
        Timezone string `json:"timezone"`
}

我想迭代响应以将某些元素的值深入到结构中

  1. 我如何获得Symbols => Symbol的值?
  2. 我如何获得Symbols => Filters => MaxPrice的值?

我知道timezone工作正常,但不确定如何获取symbolmaxPrice

var data []response
    
for _, r := range data {
    fmt.Println("timezone: ", r.Timezone)
    fmt.Println("symbol: ", r.Symbols.Symbol) // how???
    fmt.Println("maxPrice: ", r.Symbols.Filters.MaxPrice) // how???
}

看起来像这样

{
    "timezone": "UTC",
    "symbols": [{
            "symbol": "TESLA",
            "status": "TRADING",
            "baseAssetPrecision": 8,
            "baseCommissionPrecision": 8,
            "filters": [{
                    "filterType": "PRICE_FILTER",
                    "minPrice": "0.00000100",
                    "maxPrice": "922327.00000000",
                    "tickSize": "0.00000100"
                },
                {
                    "filterType": "PERCENT_PRICE",
                    "multiplierUp": "5",
                    "multiplierDown": "0.2",
                    "avgPriceMins": 5
                },
                {
                    "filterType": "LOT_SIZE",
                    "minQty": "0.00010000",
                    "maxQty": "100000.00000000",
                    "stepSize": "0.00010000"
                },
                {
                    "filterType": "MIN_NOTIONAL",
                    "minNotional": "0.00010000",
                    "applyToMarket": true,
                    "avgPriceMins": 5
                },
                {
                    "filterType": "ICEBERG_PARTS",
                    "limit": 10
                },
                {
                    "filterType": "MARKET_LOT_SIZE",
                    "minQty": "0.00000000",
                    "maxQty": "891.04020423",
                    "stepSize": "0.00000000"
                },
                {
                    "filterType": "MAX_NUM_ORDERS",
                    "maxNumOrders": 200
                },
                {
                    "filterType": "MAX_NUM_ALGO_ORDERS",
                    "maxNumAlgoOrders": 5
                }
            ]
        },
        {
            "symbol": "AAPL",
            "status": "TRADING",
            "baseAssetPrecision": 8,
            "baseCommissionPrecision": 8,
            "filters": [{
                    "filterType": "PRICE_FILTER",
                    "minPrice": "0.00000100",
                    "maxPrice": "922327.00000000",
                    "tickSize": "0.00000100"
                },
                {
                    "filterType": "PERCENT_PRICE",
                    "multiplierUp": "5",
                    "multiplierDown": "0.2",
                    "avgPriceMins": 5
                },
                {
                    "filterType": "LOT_SIZE",
                    "minQty": "0.00010000",
                    "maxQty": "100000.00000000",
                    "stepSize": "0.00010000"
                },
                {
                    "filterType": "MIN_NOTIONAL",
                    "minNotional": "0.00010000",
                    "applyToMarket": true,
                    "avgPriceMins": 5
                },
                {
                    "filterType": "ICEBERG_PARTS",
                    "limit": 10
                },
                {
                    "filterType": "MARKET_LOT_SIZE",
                    "minQty": "0.00000000",
                    "maxQty": "891.04020423",
                    "stepSize": "0.00000000"
                },
                {
                    "filterType": "MAX_NUM_ORDERS",
                    "maxNumOrders": 200
                },
                {
                    "filterType": "MAX_NUM_ALGO_ORDERS",
                    "maxNumAlgoOrders": 5
                }
            ]
        }
    ]
}

我如何迭代

您用于解组 JSON 的目标结构定义不正确。 如果你看一下你的 JSON 结构,它是一个 object 类型, symbols是一个数组类型。 等效的 Go 表示将是具有符号记录切片的type struct

你的 function 应该写成

var data response
if err := json.Unmarshal([]byte(jsonStr), &data); err != nil {
    panic(err)
}
for _, rec := range data.Symbols {
    fmt.Println(rec.Symbol)
    for _, filter := range rec.Filters {
        fmt.Printf("%f\n", filter.MaxPrice)
    }
}

https://go.dev/play/p/5oxJfYx_61M

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM