返回顶部
首页 > 资讯 > 后端开发 > GO >json unmarshal 是否有“any”标签?
  • 553
分享到

json unmarshal 是否有“any”标签?

2024-04-05 00:04:29 553人浏览 八月长安
摘要

今日不肯埋头,明日何以抬头!每日一句努力自己的话哈哈~哈喽,今天我将给大家带来一篇《JSON unmarshal 是否有“any”标签?》,主要内容是讲解等等,感兴趣的朋友可以收藏或者有更好的建议在

今日不肯埋头,明日何以抬头!每日一句努力自己的话哈哈~哈喽,今天我将给大家带来一篇《JSON unmarshal 是否有“any”标签?》,主要内容是讲解等等,感兴趣的朋友可以收藏或者有更好的建议在评论提出,我都会认真看的!大家一起进步,一起学习

问题内容

我想对 coinmarketcap 进行两次调用,两次调用的响应几乎相同,只有一个 id 不同

如果我使用 id="1" 进行调用,那么响应结构将是这样的

{
  "status": {
    "timestamp": "2022-01-31t11:08:10.552z",
    "error_code": 0,
    "error_message": null,
    "elapsed": 29,
    "credit_count": 1,
    "notice": null
  },
  "data": {
    "1": {
      "id": 1,
      "name": "bitcoin",
      "symbol": "btc",
      "slug": "bitcoin",
      "num_market_pairs": 9121,
      "date_added": "2013-04-28t00:00:00.000z",
      "max_supply": 21000000,
      [...]
      "last_updated": "2022-01-31t11:06:00.000z",
      "quote": {
        "usd": {
          "price": 37287.959833145724,
          "volume_24h": 16426509863.271738,
          "volume_change_24h": -5.6098,
          "percent_change_1h": 0.18350099,
          "percent_change_24h": -2.27056162,
          "percent_change_7d": 11.98926671,
          "percent_change_30d": -20.53627257,
          "percent_change_60d": -33.95545743,
          "percent_change_90d": -40.97732382,
          "market_cap": 706414097373.7339,
          "market_cap_dominance": 41.8173,
          "fully_diluted_market_cap": 783047156496.06,
          "last_updated": "2022-01-31t11:06:00.000z"
        }
      }
    }
  }
}

当我使用 id="1027" 进行相同的 api 调用时,响应会更改其结构

{
  "status": {
    "timestamp": "2022-01-31t11:46:02.894z",
    "error_code": 0,
    "error_message": null,
    "elapsed": 28,
    "credit_count": 1,
    "notice": null
  },
  "data": {
    "1027": {
      "id": 1027,
      "name": "ethereum",
      "symbol": "eth",
      "slug": "ethereum",
      "num_market_pairs": 5482,
      "date_added": "2015-08-07t00:00:00.000z",
      "max_supply": null,
      [...]
      "last_updated": "2022-01-31t11:44:00.000z",
      "quote": {
        "usd": {
          "price": 2535.692637309123,
          "volume_24h": 10427616453.128471,
          "volume_change_24h": -6.6085,
          "percent_change_1h": -0.23965775,
          "percent_change_24h": -3.07033246,
          "percent_change_7d": 12.35705047,
          "percent_change_30d": -31.64459631,
          "percent_change_60d": -44.12893821,
          "percent_change_90d": -42.93608624,
          "market_cap": 302724966788.3792,
          "market_cap_dominance": 17.9889,
          "fully_diluted_market_cap": 302724966788.38,
          "last_updated": "2022-01-31t11:44:00.000z"
        }
      }
    }
  }
}

在声明结构时是否有可能使用 json:"*any"

现在,如果我用 1 (json:"1") 声明它,它只适用于 btc

type CoinInfoResponse struct {
    Status struct {
        Timestamp    time.Time   `json:"timestamp"`
        ErrorCode    int         `json:"error_code"`
        ErrORMessage interface{} `json:"error_message"`
        Elapsed      int         `json:"elapsed"`
        CreditCount  int         `json:"credit_count"`
        Notice       interface{} `json:"notice"`
    } `json:"status"`
    Data struct {
        Coin struct {
            ID             int       `json:"id"`
            Name           string    `json:"name"`
            Symbol         string    `json:"symbol"`
            Slug           string    `json:"slug"`
            NumMarketPairs int       `json:"num_market_pairs"`
            DateAdded      time.Time `json:"date_added"`
            Tags           []struct {
                Slug     string `json:"slug"`
                Name     string `json:"name"`
                CateGory string `json:"category"`
            } `json:"tags"`
            MaxSupply         interface{} `json:"max_supply"`
            CirculatingSupply float64     `json:"circulating_supply"`
            TotalSupply       float64     `json:"total_supply"`
            Platform          struct {
                ID           int    `json:"id"`
                Name         string `json:"name"`
                Symbol       string `json:"symbol"`
                Slug         string `json:"slug"`
                TokenAddress string `json:"token_address"`
            } `json:"platform"`
            IsActive    int       `json:"is_active"`
            CmcRank     int       `json:"cmc_rank"`
            IsFiat      int       `json:"is_fiat"`
            LastUpdated time.Time `json:"last_updated"`
            Quote       struct {
                USD struct {
                    Price            float64   `json:"price"`
                    Volume24H        float64   `json:"volume_24h"`
                    PercentChange1H  float64   `json:"percent_change_1h"`
                    PercentChange24H float64   `json:"percent_change_24h"`
                    PercentChange7D  float64   `json:"percent_change_7d"`
                    PercentChange30D float64   `json:"percent_change_30d"`
                    PercentChange60D float64   `json:"percent_change_60d"`
                    PercentChange90D float64   `json:"percent_change_90d"`
                    MarketCap        float64   `json:"market_cap"`
                    LastUpdated      time.Time `json:"last_updated"`
                } `json:"USD"`
            } `json:"quote"`
        } `json:"1"`
    } `json:"data"`
}


正确答案


您需要一个自定义解组器。它应该首先解析“id”,然后解组内部 {...} 对象。

示例(https://go.dev/play/p/co12qwKBFpc):

package main

import (
    "bytes"
    "encoding/json"
    "fmt"
    "log"
    "strings"
)

const input = `
{
  "status": {
    "error_code": 100
  },
  "data": {
    "12345": {
      "id": 12345,
      "name": "aaaaa",
      "symbol": "bbbb"
    }
  }
}`

type data struct {
    TagName string
    Coin    struct {
        ID     int    `json:"id"`
        Name   string `json:"name"`
        Symbol string `json:"symbol"`
        // other fileds skipped
    }
}

func (d *data) UnmarshalJSON(b []byte) error {
    idx := bytes.Index(b, []byte(":"))
    // cut "number" and put into TagName
    d.TagName = strings.Trim(string(b[:idx-1]), "{\":\n ")
    // unmarshal internal {} object
    return json.Unmarshal(b[idx+1:len(b)-1], &d.Coin)
}

type Response struct {
    Status struct {
        ErrorCode int `json:"error_code"`
    } `json:"status"`
    Data data
}

func main() {
    var resp Response
    if err := json.Unmarshal([]byte(input), &resp); err != nil {
        log.Fatal(err)
    }

    fmt.Printf("%+v\n", resp)
}

本篇关于《json unmarshal 是否有“any”标签?》的介绍就到此结束啦,但是学无止境,想要了解学习更多关于golang的相关知识,请关注编程网公众号!

您可能感兴趣的文档:

--结束END--

本文标题: json unmarshal 是否有“any”标签?

本文链接: https://lsjlt.com/news/596681.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • json unmarshal 是否有“any”标签?
    今日不肯埋头,明日何以抬头!每日一句努力自己的话哈哈~哈喽,今天我将给大家带来一篇《json unmarshal 是否有“any”标签?》,主要内容是讲解等等,感兴趣的朋友可以收藏或者有更好的建议在...
    99+
    2024-04-05
  • 具有不同结构标签集的 Golang Unmarshal
    php小编百草今天为大家介绍一种强大的Golang特性——具有不同结构标签集的Unmarshal。在Golang编程中,Unmarshal是一种将数据转换为结构体的过程。但是,当我们的...
    99+
    2024-02-10
  • html的标签是否成对出现
    这篇文章给大家介绍html的标签是否成对出现,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。html的标签不一定是成对出现,也有单独呈现的标签,即没有闭合标签的标签;它们是在开始标签中就...
    99+
    2024-04-02
  • mybatis test标签如何判断值是否相等
    mybatis test标签判断值是否相等 mybatis可以很方便生成动态sql, 常用的方式如下: <if test="id != null and i...
    99+
    2024-04-02
  • jquery如何判断某个标签是否存在
    这篇文章主要介绍“jquery如何判断某个标签是否存在”,在日常操作中,相信很多人在jquery如何判断某个标签是否存在问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”jque...
    99+
    2024-04-02
  • mybatis test标签怎么判断值是否相等
    本篇内容介绍了“mybatis test标签怎么判断值是否相等”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!mybatis test标签判断...
    99+
    2023-06-20
  • 如何使用jQuery判断标签是否为span
    jQuery是一种基于JavaScript的库,它为JavaScript提供了强大的功能,可以轻松地处理各种类型的标签、元素和事件。在开发中,我们经常需要针对不同的标签类型进行不同的操作。本文将介绍如何使用jQuery判断标签是否为span...
    99+
    2023-05-14
  • Golang多个字段具有相同的json标签名称
    欢迎各位小伙伴来到编程网,相聚于此都是缘哈哈哈!今天我给大家带来《Golang多个字段具有相同的json标签名称》,这篇文章主要讲到等等知识,如果你对Golang相关的知识非常感兴趣或者正在自学,都...
    99+
    2024-04-04
  • Python的any()函数:检查列表中是否有至少一个True值
    Python的any()函数:检查列表中是否有至少一个True值Python是一种功能强大的编程语言,拥有许多内置函数来帮助我们简化编程任务。其中之一就是any()函数,它可以用于检查列表中是否存在至少一个True值。本文将详细介绍any(...
    99+
    2023-11-18
    any函数 列表检查 True值
  • HTML中有边框的标签是什么
    这篇文章主要介绍了HTML中有边框的标签是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇HTML中有边框的标签是什么文章都会有所收获,下面我们一起来看看吧。 ...
    99+
    2024-04-02
  • Atlas是否支持数据地理位置标记和数据分类标签
    是的,Atlas支持数据地理位置标记和数据分类标签。用户可以使用Atlas来对数据进行地理位置标记,以便在地图上显示数据的位置信息。...
    99+
    2024-04-02
  • 是否需要使用Meta关键词标签来优化SEO
    虽然Meta关键词标签曾经在SEO优化中起到作用,但现在多数主流搜索引擎已经不再使用它来决定搜索排名。本文将讨论:一、Meta关键词标签的历史地位;二、主流搜索引擎的态度变化;三、现代SEO策略的替代方案。例如,将注意力集中在提供高质量的内...
    99+
    2023-10-29
    关键词 标签 Meta
  • html标签有哪些及含义是什么
    本文小编为大家详细介绍“html标签有哪些及含义是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“html标签有哪些及含义是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。...
    99+
    2024-04-02
  • HTML5新标签有哪些及作用是什么
    今天小编给大家分享一下HTML5新标签有哪些及作用是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来...
    99+
    2024-04-02
  • HTML的标签有哪些及含义是什么
    今天小编给大家分享一下HTML的标签有哪些及含义是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了...
    99+
    2024-04-02
  • HTML常用标签有哪些及含义是什么
    这篇文章主要介绍“HTML常用标签有哪些及含义是什么”,在日常操作中,相信很多人在HTML常用标签有哪些及含义是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”HTML常用...
    99+
    2024-04-02
  • vue只有一个根标签的原因是什么
    今天小编给大家分享一下vue只有一个根标签的原因是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了...
    99+
    2024-04-02
  • Golang标志的由来:是否真的与狗有关?
    Golang标志的由来:是否真的与狗有关? Golang,即Go语言,是一种由Google开发的开源编程语言,它的标志是一个可爱的蓝色长毛狗在一片蓝色草地上。许多人都好奇,Golang...
    99+
    2024-03-07
    golang 标志 go语言 标准库
  • 评标委员会在评标期间是否有义务核实投标信息真伪?
    拟在建项目 http://www.zhaobiao.cn/  整理 评标委员会在评标期间是否有义务核实投标信息真伪? 评标委员会在评标期间没有义务核实投标信息真伪,但是有权要求投标人对投...
    99+
    2024-04-02
  • 下HTML5新增加的标签有哪些及含义是什么
    本文小编为大家详细介绍“下HTML5新增加的标签有哪些及含义是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“下HTML5新增加的标签有哪些及含义是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作