You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 07:33:26