如何在C# Web API中根据用户输入字段提取JSON特定字段数据
实现按指定字段过滤JSON数据的C# Web API方案
核心思路
- 从目标JSON URI拉取原始数据并解析为可操作的JSON对象
- 接收用户传入的
element字段名参数 - 从原始JSON中提取指定字段的键值对,包装成新的JSON结构返回
方案1:使用Newtonsoft.Json(经典JSON库)
1. 安装依赖
Install-Package Newtonsoft.Json
2. 控制器代码示例
using Newtonsoft.Json.Linq; using System.Net.Http; using Microsoft.AspNetCore.Mvc; [ApiController] [Route("api/data")] public class DataController : ControllerBase { private readonly HttpClient _httpClient; public DataController(HttpClient httpClient) { _httpClient = httpClient; } [HttpGet("filter")] public async Task<IActionResult> GetFilteredField([FromQuery] string element) { // 替换为你的JSON数据源地址 var jsonSourceUri = "https://your-json-datasource-url"; var rawJson = await _httpClient.GetStringAsync(jsonSourceUri); var originalData = JObject.Parse(rawJson); // 校验字段是否存在 if (!originalData.ContainsKey(element)) { return BadRequest($"指定字段 {element} 不存在"); } // 构建仅包含目标字段的新JSON对象 var filteredResult = new JObject { { element, originalData[element] } }; return Ok(filteredResult); } }
方案2:使用System.Text.Json(.NET Core 3.0+内置)
1. 无需额外安装(框架内置)
2. 控制器代码示例
using System.Text.Json; using System.Net.Http; using Microsoft.AspNetCore.Mvc; [ApiController] [Route("api/data")] public class DataController : ControllerBase { private readonly HttpClient _httpClient; private readonly JsonSerializerOptions _jsonOpts = new() { PropertyNameCaseInsensitive = true // 可选:忽略字段大小写匹配 }; public DataController(HttpClient httpClient) { _httpClient = httpClient; } [HttpGet("filter")] public async Task<IActionResult> GetFilteredField([FromQuery] string element) { var jsonSourceUri = "https://your-json-datasource-url"; var rawJson = await _httpClient.GetStringAsync(jsonSourceUri); // 解析JSON文档 using var jsonDoc = JsonDocument.Parse(rawJson); var root = jsonDoc.RootElement; // 尝试获取目标字段 if (!root.TryGetProperty(element, out var targetField)) { return BadRequest($"指定字段 {element} 不存在"); } // 构造返回的JSON结构 var filteredJson = $"{{\"{element}\": {targetField.GetRawText()}}}"; using var resultDoc = JsonDocument.Parse(filteredJson); return Ok(resultDoc.RootElement); } }
额外注意事项
- 需添加异常捕获:处理JSON请求失败、格式解析错误等场景
- 若支持多字段过滤,可将参数改为
[FromQuery] List<string> elements,循环添加字段到结果对象 - 可扩展字段名模糊匹配逻辑,提升用户体验
内容的提问来源于stack exchange,提问作者user3665818
相关产品推荐
相关产品推荐

