如何用C#从JSON数组中获取指定日期对应的数值
解决方案
方式1:遍历数组匹配目标日期
先获取JSON里的data数组元素,通过EnumerateArray()遍历数组中的每一项,逐个检查date字段是否和目标日期一致,匹配成功后提取对应的value值。
修改后的完整代码示例:
using System.Text.Json; using System; using System.Windows.Forms; namespace test { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { Label unitname = label3; string targetDate = "1985-12-01"; // 要查询的目标日期 string QUERY_URL = "JSON URL HERE"; Uri queryUri = new Uri(QUERY_URL); using (System.Net.WebClient client = new System.Net.WebClient()) { var json_data = client.DownloadString(queryUri); // 用using包裹JsonDocument,避免内存泄漏 using (var jsonDocument = JsonDocument.Parse(json_data)) { var rootElement = jsonDocument.RootElement; // 保留你原来获取unit字段的逻辑 var unitElement = rootElement.GetProperty("unit"); var unit = unitElement.GetString(); unitname.Text = unit; // 处理data数组,查找目标日期对应的value var dataArray = rootElement.GetProperty("data"); string targetValue = null; foreach (var item in dataArray.EnumerateArray()) { string currentDate = item.GetProperty("date").GetString(); if (currentDate == targetDate) { targetValue = item.GetProperty("value").GetString(); break; // 找到后立即退出循环 } } // 示例:将结果显示到label4 if (targetValue != null) { label4.Text = $"对应数值:{targetValue}"; } else { label4.Text = "未找到指定日期的数据"; } } } } } }
方式2:用LINQ简化查找逻辑
如果项目已经引用System.Linq,可以用LINQ语句缩短代码,让逻辑更简洁:
// 替换上述代码中的遍历部分 var dataArray = rootElement.GetProperty("data"); var targetItem = dataArray.EnumerateArray() .FirstOrDefault(item => item.GetProperty("date").GetString() == targetDate); string targetValue = targetItem != null ? targetItem.GetProperty("value").GetString() : null;
关键注意点
- 必须给
JsonDocument添加using语句,它实现了IDisposable接口,不用会造成内存泄漏。 - 如果JSON里的
value实际是数字类型(比如整数),可以用GetInt32()替代GetString(),根据实际JSON结构调整。 - 上述代码是精确字符串匹配日期,如果需要兼容不同日期格式,建议先把字符串转换为
DateTime类型再比较。
内容的提问来源于stack exchange,提问作者fsr_j
相关产品推荐
相关产品推荐

