为了账号安全,请及时绑定邮箱和手机立即绑定

Golang 嵌套映射过滤器

Golang 嵌套映射过滤器

Go
收到一只叮咚 2022-12-26 10:15:30
package mainimport ("encoding/json""fmt""io/ioutil""net/http""strings")func main() {fmt.Println(fecthData())}func fecthData() (map[string]interface{}, error) {body := strings.NewReader("dil_kodu=tr")req, err := http.NewRequest("POST", "https://www.haremaltin.com/dashboard/ajax/doviz", body)if err != nil {    // handle err    return nil, err}req.Header.Set("X-Requested-With", "XMLHttpRequest")resp, err := http.DefaultClient.Do(req)if err != nil {    // handle err    return nil, err}defer resp.Body.Close()jsonData, err := ioutil.ReadAll(resp.Body)if err != nil {    panic(err)    return nil, err}var data map[string]interface{}err = json.Unmarshal(jsonData, &data)if err != nil {    return nil, err}return data, nil}你可以看到上面的完整代码,我有一个如下的响应,它是你看到的嵌套映射,并且想要达到“data-ATA5_ESKI-satis”值,即 34319。有没有人可以帮助我。感谢您的时间部分回复如下:地图[数据:地图[AEDTRY:地图[也:4.6271代码:AEDTRY dir:地图[align_dir:satis_dir:]舒适:4.7116能力:4.6224满足:4.7271日期:17-06-2022 19:41:45 yuksek:4.7276] AEDUSD:map[alis:0.2680 code:AEDUSD dir:map[alis_dir: satis_dir:] comfort:0.27 capacity:0.268 satis:0.2700 date:17-06-2022 19:30:02 yuksek:0.27]... 星期一:地图[also:1024.790 code:ALTIN dir:map[align_dir:down satis_dir:down] dust:1029.05 time:1032.13 satis:1030.650 date:17-06-2022 19:41:58 yuksek:1040] ATA5_ESKI:map[also :33869 代码: ATA5_ESKI 目录: 地图 [ move_dir : down satis_dir : down ] dust : 34266 time : 34112 satis : 34319 date : 17 - 06 - 2022 19 : 41 : 58 yuksek : 34630] XPTUSD : map [ move : 933 code : XPTUSD dir :map[alis_dir: satis_dir:] heart:936 caps:953 satis:936 date:17-06-2022 19:41:58 yuksek:957]] meta:map[fiyat_guncelleme:2000 fiyat_yayini:web_socket time:1.655484118278e +1 time_formatted:]]
查看完整描述

1 回答

?
撒科打诨

TA贡献1934条经验 获得超2个赞

for _, v := range data { // we need value part of the map

    m, ok := v.(map[string]interface{}) // we need the convert the map 

                                        // into interface for iteration

    if !ok {

        fmt.Printf("Error %T", v)

    }

    for k, l := range m {

        if k == "ATA_ESKI"{ // the value we want is inside of this map

            a, ok := l.(map[string]interface{}) // interface convert again

            if !ok {

                fmt.Printf("Error %T", v)

            }

            for b,c := range a{

                if b == "satis"{ // the value we want

                    fmt.Println("Price is", c)

                }

            }

        }

    }

}

我们可以在最后的“返回数据,零”之前获得添加此迭代的值,但我认为必须有更简单的方法。


查看完整回答
反对 回复 2022-12-26
  • 1 回答
  • 0 关注
  • 72 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信