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

如何从嵌套JSON数组提取数据并映射到C#对象?

从JSON提取数据到C# Score对象

需求说明

需要将给定JSON数据源中每个键对应的等级字符串、整数数组的第一个值、第二个值,分别映射到自定义的Score类的对应属性中:

  • 等级字符串 → Grade属性
  • 整数数组第一个元素 → PotentialPoints属性
  • 整数数组第二个元素 → ActualPoints属性

C# Score对象定义

public class Score 
{
  public string Grade { get; set; } // Bronze, Silver, Gold
  public int PotentialPoints { get; set; } // 对应整数数组第一个元素
  public int ActualPoints { get; set; } // 对应整数数组第二个元素
}

数据源(修正后合法JSON)

[
  6,
  [
    [],
    4,
    {
      "time crunch": [
        "Bronze",
        [228, 380]
      ],
      "3 rides": [
        "Bronze",
        [1418, 2730]
      ],
      "4 rides": [
        "Bronze",
        [180, 320]
      ],
      "[2 rides,2 runs]": [
        "Silver",
        [220, 270]
      ]
    }
  ]
]

实现方案(使用Json.NET)

由于JSON结构嵌套且不规则,使用Newtonsoft.Json(Json.NET)的JObject/JArray进行灵活解析是最优方案:

1. 安装Json.NET包

通过NuGet安装:

Install-Package Newtonsoft.Json

2. 解析代码

using Newtonsoft.Json.Linq;
using System.Collections.Generic;

public static class ScoreParser
{
    public static Dictionary<string, Score> ParseScores(string rawJson)
    {
        var scoreMap = new Dictionary<string, Score>();
        
        // 解析根JSON数组
        var root = JArray.Parse(rawJson);
        // 获取存储评分数据的对象(根数组第二个元素的第三个子项)
        var scoreContainer = root[1][2] as JObject;
        
        // 遍历所有评分项
        foreach (var prop in scoreContainer.Properties())
        {
            var valueArray = prop.Value as JArray;
            if (valueArray?.Count < 2) continue;
            
            // 提取等级
            var grade = valueArray[0].Value<string>();
            // 提取分数数组
            var points = valueArray[1] as JArray;
            if (points?.Count < 2) continue;
            
            // 构建Score对象并加入字典
            scoreMap.Add(prop.Name, new Score
            {
                Grade = grade,
                PotentialPoints = points[0].Value<int>(),
                ActualPoints = points[1].Value<int>()
            });
        }
        
        return scoreMap;
    }
}

3. 使用示例

// 假设jsonString是你的数据源JSON字符串
var scores = ScoreParser.ParseScores(jsonString);

// 遍历输出结果
foreach (var kvp in scores)
{
    Console.WriteLine($"项目:{kvp.Key}");
    Console.WriteLine($"等级:{kvp.Value.Grade}");
    Console.WriteLine($"潜力分:{kvp.Value.PotentialPoints}");
    Console.WriteLine($"实际分:{kvp.Value.ActualPoints}\n");
}

输出结果示例:

项目:time crunch
等级:Bronze
潜力分:228
实际分:380

项目:3 rides
等级:Bronze
潜力分:1418
实际分:2730
...

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 23:16:13