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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 22:30:56