如何在C#中使用Newtonsoft解析批量股票报价API的动态JSON数组?
解析批量报价API的动态JSON数据
别担心,用Newtonsoft.Json处理这个动态的「Stock Quotes」数组其实很简单,我给你两种常用的方案,按需选就行:
方案一:强类型反序列化(推荐,更安全易维护)
首先根据API返回的JSON结构,定义对应的实体类。假设你的批量报价JSON返回格式大概是这样:
{ "SomeOtherField": "xxx", "Stock Quotes": [ { "Symbol": "AAPL", "Price": 180.5, "Timestamp": "2024-05-20T14:30:00" }, { "Symbol": "MSFT", "Price": 380.2, "Timestamp": "2024-05-20T14:30:00" } ] }
那你可以创建两个类:
// 对应整个API返回的根对象 public class BatchQuoteResponse { // 注意这里的JsonProperty要和JSON里的键名完全匹配,包括空格 [JsonProperty("Stock Quotes")] public List<StockQuote> StockQuotes { get; set; } // 如果还有其他顶层字段,也可以在这里添加对应的属性 } // 对应数组里的单个股票报价 public class StockQuote { public string Symbol { get; set; } public decimal Price { get; set; } public DateTime Timestamp { get; set; } // 根据实际返回的字段添加更多属性 }
接下来就可以解析并提取数据了:
// 假设你已经通过HTTP请求获取到了JSON字符串,存在jsonResponse变量里 var batchResponse = JsonConvert.DeserializeObject<BatchQuoteResponse>(jsonResponse); // 遍历StockQuotes数组,提取每一条数据 foreach (var quote in batchResponse.StockQuotes) { Console.WriteLine($"股票代码:{quote.Symbol},当前价格:{quote.Price},时间:{quote.Timestamp}"); // 这里可以把数据存入你的应用或者做其他处理 }
方案二:动态解析(适合快速测试或结构经常变动的情况)
如果不想定义实体类,也可以用JObject直接操作JSON:
var jsonObj = JObject.Parse(jsonResponse); // 获取「Stock Quotes」数组 var stockQuotesArray = jsonObj["Stock Quotes"] as JArray; // 遍历数组 foreach (var quoteItem in stockQuotesArray) { string symbol = quoteItem["Symbol"].ToString(); decimal price = decimal.Parse(quoteItem["Price"].ToString()); DateTime timestamp = DateTime.Parse(quoteItem["Timestamp"].ToString()); Console.WriteLine($"股票代码:{symbol},当前价格:{price},时间:{timestamp}"); }
两种方案都能轻松提取动态数量的股票数据,强类型的方式更适合长期维护,因为有编译时检查,不容易出错;动态方式更灵活,适合临时调试。
内容的提问来源于stack exchange,提问作者slightly drifting
相关产品推荐
相关产品推荐

