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

使用Newtonsoft.Json在C#中读取JSON:结构校验与model列表提取

一、你的JSON结构是否正确?

完全正确!我帮你核对了几个关键的JSON语法要求:

  • 所有键名(比如mercedes、model)和字符串值(比如GLS 350 d 4MATIC)都使用了双引号,这是JSON强制要求的(不能用单引号);
  • 数值类型的字段(year、test_drive)没有加引号,符合JSON的类型规范;
  • 对象嵌套结构清晰,大括号、逗号的配对都没有问题;
  • 最后两个顶级属性test_drive(数值)和path(转义后的字符串)也完全合规,没有语法错误。
二、用Newtonsoft.Json在C#提取所有"model"属性为列表

别担心,这事儿其实不难,我给你一步步讲清楚:

第一步:先安装Newtonsoft.Json包

你需要先在你的C#项目里安装Newtonsoft.Json(也就是Json.NET),可以通过两种方式:

  • 在Visual Studio的NuGet包管理器控制台输入:Install-Package Newtonsoft.Json;
  • 或者在NuGet包管理器界面搜索“Newtonsoft.Json”,点击安装。

第二步:编写代码提取model列表

这里有两种实现方式,你可以选自己顺手的:

方式一:常规遍历(适合新手理解逻辑)

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

class Program
{
    static void Main()
    {
        // 你的JSON字符串(注意转义双引号,也可以从文件读取)
        string jsonContent = @"{ ""mercedes"": { ""model"" : ""GLS 350 d 4MATIC"", ""code"" : ""MB-GLS"", ""year"": 2015 }, ""bmw"": { ""model"" : ""BMW 420d Cabrio"", ""code"" : ""BM-420D"", ""year"": 2017 }, ""audi"": { ""model"" : ""A5 Sportback 2.0 TDI quattro"", ""code"" : ""AU-A5"", ""year"": 2018 }, ""tesla"": { ""model"" : ""Model S"", ""code"" : ""TS-MOS"", ""year"": 2016 }, ""test_drive"": 0, ""path"": ""D:\\Mizz\\cars\\"" } ";

        // 把JSON字符串解析成JObject对象
        JObject carData = JObject.Parse(jsonContent);

        // 创建列表存储所有model值
        List<string> allModels = new List<string>();

        // 遍历JSON里的所有顶级属性
        foreach (var property in carData.Properties())
        {
            // 只处理值是对象的属性(跳过test_drive、path这些非对象属性)
            if (property.Value.Type == JTokenType.Object)
            {
                // 提取当前对象里的model属性值
                var modelValue = property.Value["model"];
                // 确保model存在且是字符串类型
                if (modelValue != null && modelValue.Type == JTokenType.String)
                {
                    allModels.Add(modelValue.ToString());
                }
            }
        }

        // 打印结果
        foreach (var model in allModels)
        {
            Console.WriteLine(model);
        }
    }
}

方式二:LINQ简化写法(代码更简洁)

如果熟悉LINQ的话,核心逻辑可以简化成一行:

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

class Program
{
    static void Main()
    {
        string jsonContent = @"{ ""mercedes"": { ""model"" : ""GLS 350 d 4MATIC"", ""code"" : ""MB-GLS"", ""year"": 2015 }, ""bmw"": { ""model"" : ""BMW 420d Cabrio"", ""code"" : ""BM-420D"", ""year"": 2017 }, ""audi"": { ""model"" : ""A5 Sportback 2.0 TDI quattro"", ""code"" : ""AU-A5"", ""year"": 2018 }, ""tesla"": { ""model"" : ""Model S"", ""code"" : ""TS-MOS"", ""year"": 2016 }, ""test_drive"": 0, ""path"": ""D:\\Mizz\\cars\\"" } ";

        JObject carData = JObject.Parse(jsonContent);

        List<string> allModels = carData.Properties()
            // 筛选出值为对象的顶级属性
            .Where(p => p.Value.Type == JTokenType.Object)
            // 提取每个对象的model值并转成字符串
            .Select(p => p.Value["model"]?.ToString())
            // 过滤掉可能的null值(防止某个汽车对象没有model属性)
            .Where(m => !string.IsNullOrEmpty(m))
            .ToList();

        foreach (var model in allModels)
        {
            Console.WriteLine(model);
        }
    }
}

额外说明

如果你的JSON是保存在文件里的,不需要硬编码字符串,直接用JObject.Load读取即可:

using (var reader = new StreamReader(@"D:\Mizz\cars\your-file.json"))
{
    JObject carData = JObject.Load(reader);
    // 后面的提取逻辑和上面一致
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:35:28