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

C#中读取JSON第三层级数组值的技术问题

从JSON第三层级数组提取值的解决办法

嘿,我明白你现在的处境——接手一个半完成的C#网站项目,还在学习C#,遇到JSON层级提取的问题确实有点头疼。别担心,咱们一步步来解决这个问题!

首先,我先假设你的JSON结构大概是这种三层嵌套的样子(如果实际结构不一样,你可以调整类结构或者JObject的路径):

{
"TopLevelData": {
"MiddleSection": {
"TargetArray": [
{"ItemName": "第一个值"},
{"ItemName": "第二个值"}
]
}
}
}

方法一:用强类型类映射(推荐,更安全)

这是Newtonsoft.Json最常用的方式,先定义和JSON结构完全匹配的类:

// 根对象,对应JSON最外层
public class RootJsonModel
{
    public TopLevelData TopLevelData { get; set; }
}

// 第一层级对象
public class TopLevelData
{
    public MiddleSection MiddleSection { get; set; }
}

// 第二层级对象,包含目标数组
public class MiddleSection
{
    public List<TargetItem> TargetArray { get; set; }
}

// 数组里的单个元素类
public class TargetItem
{
    public string ItemName { get; set; }
}

然后反序列化JSON并提取值:

// 假设你已经通过异步任务获取到了JSON字符串
string jsonResponse = "你的异步任务返回的JSON内容";

// 反序列化到强类型对象
RootJsonModel model = JsonConvert.DeserializeObject<RootJsonModel>(jsonResponse);

// 提取第三层级数组的值,这里要注意空引用检查!
if (model?.TopLevelData?.MiddleSection?.TargetArray != null)
{
    // 把数组里的ItemName提取到变量里,比如一个List<string>
    List<string> extractedValues = model.TopLevelData.MiddleSection.TargetArray
        .Select(item => item.ItemName)
        .ToList();

    // 现在你可以把这些值输出到指定位置了,比如网站的控件里
    // 举个例子:如果是ASP.NET WebForms,添加到Label或者Repeater
    foreach (var val in extractedValues)
    {
        yourDisplayLabel.Text += $"{val}<br/>";
        // 如果是MVC/Razor页面,可将这个List传入View循环渲染
    }
}

如果JSON里的键和你类的属性名不一样(比如JSON里是target_array而不是TargetArray),可以用[JsonProperty]特性来手动匹配:

[JsonProperty("target_array")]
public List<TargetItem> TargetArray { get; set; }

方法二:用JObject动态解析(不用定义类,适合快速测试)

如果你不想写一堆类,也可以用Newtonsoft.Json的JObject直接解析:

string jsonResponse = "你的JSON字符串";
JObject jsonObj = JObject.Parse(jsonResponse);

// 定位到第三层级的数组,注意路径要和你的JSON结构完全对应
JArray targetArray = (JArray)jsonObj["TopLevelData"]["MiddleSection"]["TargetArray"];

if (targetArray != null)
{
    foreach (JToken item in targetArray)
    {
        // 提取数组里的单个值
        string itemValue = (string)item["ItemName"];
        // 输出到指定位置
        Console.WriteLine(itemValue); // 或者赋值给网站控件
    }
}

关键注意点

  • 空引用检查:一定要用?.或者提前判断每个层级是否为null,不然如果JSON里某个层级缺失,程序会抛出空引用异常。
  • 属性名匹配:确保类的属性名和JSON的键完全一致,或者用[JsonProperty]手动映射。
  • 异步任务的JSON获取:如果你的异步任务是用HttpClient之类的工具获取,记得用await来正确获取返回的JSON字符串,比如string json = await httpClient.GetStringAsync("目标接口URL");

内容的提问来源于stack exchange,提问作者Paul Almond

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:21:32