如何解析BitZ动态币种名API返回JSON获取加密货币USDT价格
BitZ API 通用解析方案
核心思路是利用JsonDotNet原生支持的字典映射能力,替代原固定结构的实体类,适配动态的币种键:
1. 重定义通用实体类
删除原有针对单一币种的Btc、固定结构Data类,替换为以下通用结构:
// 固定结构:对应币种下的USDT价格字段 public class CoinRateItem { public string usdt { get; set; } } // 根结构:将data字段改为字典类型,key为动态币种名,value为价格结构 public class BitZRoot { public int status { get; set; } public string msg { get; set; } public Dictionary<string, CoinRateItem> data { get; set; } public int time { get; set; } public string microtime { get; set; } public string source { get; set; } }
2. 编写通用解析逻辑
解析后直接用请求的币种名作为key从字典中取值即可,无需针对每个币种修改代码:
// 变量存储解析后的价格 private decimal bitZPrice; private void BitZ_ProcessJsonData(string jsonText, string coinName) { var root = JsonConvert.DeserializeObject<BitZRoot>(jsonText); // 异常判断避免空引用 if (root.status != 0 || root.data == null) { Debug.Log($"BitZ请求错误:{root.msg}"); return; } // BitZ返回的币种key为小写,统一转小写匹配避免大小写问题 string lowerCoin = coinName.ToLower(); if (root.data.TryGetValue(lowerCoin, out CoinRateItem rateItem)) { // 按需将字符串价格转为数值类型 if (decimal.TryParse(rateItem.usdt, out bitZPrice)) { // 此处可添加解析成功后的后续逻辑 Debug.Log($"{coinName}对USDT价格:{bitZPrice}"); } } else { Debug.Log($"未查询到{coinName}的价格数据"); } }
3. 调用逻辑调整
和Bittrex的用法完全对齐,仅需修改请求URL的coinName参数即可适配所有币种,示例请求代码:
private IEnumerator GetBitZPrice(string coinName) { string jsonURL = "https://apiv2.bitz.com/Market/coinRate?coins=" + coinName; UnityWebRequest request = UnityWebRequest.Get(jsonURL); yield return request.SendWebRequest(); if (request.error == null) { BitZ_ProcessJsonData(request.downloadHandler.text, coinName); } else { Debug.Log("BitZ请求失败:" + request.error); } }
内容的提问来源于stack exchange,提问作者Abdessamad EL
相关产品推荐
相关产品推荐

