C#如何从JSON响应嵌套对象提取指定key值创建列表
C# 提取目标JSON字段的实现方法
你已经通过var responseMessage1 = await request1.Content.ReadAsStringAsync();拿到接口返回的JSON字符串,以下是两种常用的提取方案,最终都会生成支持foreach遍历的List<string>类型结果。
方案1:使用.NET内置System.Text.Json(无第三方依赖,推荐)
不需要定义完整的JSON映射实体类,直接轻量解析提取目标字段即可:
- 引用
System.Text.Json命名空间 - 解析JSON根节点后定位到
operations数组 - 遍历数组提取每个元素的
description值,加入结果列表
using System.Text.Json; // 原有接口请求代码 var responseMessage1 = await request1.Content.ReadAsStringAsync(); var desc_list = new List<string>(); // 若接口返回字段大小写不固定,可开启大小写不敏感配置 var jsonOptions = new JsonDocumentOptions { PropertyNameCaseInsensitive = true }; using (JsonDocument doc = JsonDocument.Parse(responseMessage1, jsonOptions)) { JsonElement operationsNode = doc.RootElement.GetProperty("operations"); foreach (JsonElement opItem in operationsNode.EnumerateArray()) { // 加空判断避免字段缺失抛出异常 if (opItem.TryGetProperty("description", out JsonElement descNode)) { desc_list.Add(descNode.GetString()!); } } } // 直接遍历使用 foreach(var item in desc_list) { Console.WriteLine(item); }
运行后遍历输出结果为:
Generate Plan Stop Station
方案2:使用第三方库Newtonsoft.Json(Json.NET)
如果你的项目已经引入了Newtonsoft.Json序列化库,可以用以下方式实现:
- 引用
Newtonsoft.Json.Linq命名空间 - 解析为
JObject后通过LINQ直接提取字段生成列表
using Newtonsoft.Json.Linq; // 原有接口请求代码 var responseMessage1 = await request1.Content.ReadAsStringAsync(); JObject jsonObj = JObject.Parse(responseMessage1); var desc_list = jsonObj["operations"] .Select(op => op["description"]?.ToString()) .Where(desc => !string.IsNullOrEmpty(desc)) .ToList(); // 直接遍历使用 foreach(var item in desc_list) { Console.WriteLine(item); }
说明:两种方案生成的desc_list都是标准的泛型字符串列表,完全支持遍历、LINQ操作等所有列表常用功能。如果后续需要用到JSON里的其他字段,也可以定义对应结构的实体类做完整反序列化,仅提取单个字段的场景下,上述直接解析的方式代码量更少、执行效率更高。
内容的提问来源于stack exchange,提问作者saurabh dhyani
相关产品推荐
相关产品推荐

