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

如何使用Newtonsoft.Json SelectToken方法获取JSON数组最后一项

解决方案:用Newtonsoft.Json的SelectToken获取数组最后一项

Newtonsoft.Json原生的SelectToken路径语法不支持[-1]或[^1]这类负索引写法,不过有两种可行方案满足你的需求:

方案一:使用表达式路径(无需修改后端代码)

利用SelectToken支持的表达式语法,通过@引用当前数组节点,结合length属性计算最后一项索引。前端直接输入这种路径即可:

var jsonArray = @"[{""Name"":""amir0"",""Id"":0},{""Name"":""amir1"",""Id"":1}]";
var array = JArray.Parse(jsonArray);

// 通过表达式计算最后一项的索引
Console.WriteLine(array.SelectToken("[(@.length-1)].Name")); // 输出:amir1

原理

  • @代表当前遍历的数组节点
  • @.length获取数组的元素总数
  • (@.length-1)就是最后一项的合法正索引,直接嵌入路径即可被SelectToken解析执行

方案二:自定义扩展方法支持负索引(适配[-1]写法)

如果前端必须使用[-1]这类负索引语法,可以写一个扩展方法重写路径解析逻辑,自动将负索引转换为合法的正索引:

public static class JTokenExtensions
{
    public static JToken SelectTokenWithNegativeIndex(this JToken token, string path)
    {
        var jPath = new JPath(path);
        var current = token;

        foreach (var segment in jPath.Segments)
        {
            if (segment is JIndex indexSeg)
            {
                var index = indexSeg.Index;
                // 处理负索引
                if (index < 0 && current is JArray array)
                {
                    index = array.Count + index;
                    if (index < 0)
                        throw new ArgumentOutOfRangeException(nameof(path), "索引超出范围");
                    current = array[index];
                }
                else
                {
                    current = current.SelectToken(segment.ToString());
                }
            }
            else
            {
                current = current.SelectToken(segment.ToString());
            }

            if (current == null) break;
        }
        return current;
    }
}

// 使用示例
Console.WriteLine(array.SelectTokenWithNegativeIndex("[-1].Name")); // 输出:amir1

这个方法会遍历路径的每一段,遇到负索引时自动根据数组长度转换为正索引,完全兼容前端输入的[-1]格式。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 10:37:32