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

使用Restsharp解析嵌套JSON响应提取categoryCode值的方法咨询

嵌套JSON全量提取categoryCode字段实现方案

不需要依赖固定JSON结构,不用硬写实体类映射,两种常用实现方案如下:

方案1:Newtonsoft.Json JSONPath查询(最简实现,适配任意嵌套层级)

配合RestSharp使用时直接用JSONPath的递归匹配语法,不管categoryCode藏在多少层嵌套里都能直接定位,不需要关心JSON的返回结构:

  • 首先安装NuGet包:Newtonsoft.Json
  • 代码示例:
using RestSharp;
using Newtonsoft.Json.Linq;

// RestSharp请求逻辑
var client = new RestClient("你的接口请求地址");
var request = new RestRequest();
var response = await client.ExecuteAsync(request);

// 提取逻辑
if (response.IsSuccessful && !string.IsNullOrEmpty(response.Content))
{
    var jsonObj = JObject.Parse(response.Content);
    // $..为JSONPath递归匹配语法,直接匹配所有层级下的categoryCode字段
    var categoryCodes = jsonObj.SelectTokens("$..categoryCode")
                               .Select(token => token.Value<string>())
                               .ToList();
    // 拿到的categoryCodes就是所有目标值,示例JSON返回结果为 ["276","295"]
}

如果要避免误匹配其他位置的同名字段,你也可以把查询规则写得更精准,只匹配categories数组下的categoryCode:$..categories[*].categoryCode,兼容性和安全性更高。

方案2:System.Text.Json 递归遍历实现(无第三方依赖)

如果你用的是.NET Core 3.0+版本,不想引入Newtonsoft.Json依赖,也可以自己写递归方法遍历JSON节点提取:

using RestSharp;
using System.Text.Json;
using System.Collections.Generic;

// 通用递归提取指定字段值的方法
static List<string> ExtractAllFieldValues(JsonElement element, string targetFieldName)
{
    var results = new List<string>();
    // 遍历对象节点
    if (element.ValueKind == JsonValueKind.Object)
    {
        foreach (var prop in element.EnumerateObject())
        {
            if (prop.Name == targetFieldName && prop.Value.ValueKind == JsonValueKind.String)
            {
                results.Add(prop.Value.GetString());
            }
            else
            {
                results.AddRange(ExtractAllFieldValues(prop.Value, targetFieldName));
            }
        }
    }
    // 遍历数组节点
    else if (element.ValueKind == JsonValueKind.Array)
    {
        foreach (var item in element.EnumerateArray())
        {
            results.AddRange(ExtractAllFieldValues(item, targetFieldName));
        }
    }
    return results;
}

// 调用逻辑
var client = new RestClient("你的接口请求地址");
var request = new RestRequest();
var response = await client.ExecuteAsync(request);

if (response.IsSuccessful && !string.IsNullOrEmpty(response.Content))
{
    var jsonDoc = JsonDocument.Parse(response.Content);
    var categoryCodes = ExtractAllFieldValues(jsonDoc.RootElement, "categoryCode");
}

两种方案都不需要你适配当前JSON的结构写实体类,后续接口调整嵌套层级、修改结构,只要categoryCode字段名不变,提取逻辑完全不用修改,适配你无法控制JSON返回格式的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 05:15:02