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

如何反向枚举System.Text.Json.JsonElement数组?

如何反向枚举System.Text.Json.JsonElement数组?

嘿,这个问题我之前刚好碰到过,给你分享个既高效又贴合你需求的解决方案!

首先得说,JsonElement.EnumerateArray()确实只能正向遍历数组,但我们完全没必要把整个数组转成List再反转——因为JsonElement的数组支持按索引直接访问,而且这个操作是O(1)级别的,性能和正向枚举一样高效,完全不会有额外的内存开销。

你的核心痛点是:数组元素顺序和你需要的完全相反,又没法提前知道有多少元素符合条件,所以不能靠倒着给文件命名来绕开问题。那咱们换个思路:直接从数组的最后一个元素开始往前遍历,遇到符合条件的项就按顺序编号保存,完美匹配你的需求。

具体怎么改呢?看下面的代码:

public void ParseDataPoint(JsonElement result)
{
    int i = 0;
    var data = result.GetProperty("data");
    // 先拿到数组的总元素数量
    int totalItems = data.GetArrayLength();
    
    // 从最后一个索引开始,倒着遍历到第0个元素
    for (int index = totalItems - 1; index >= 0; index--)
    {
        var item = data.GetArrayElementAtIndex(index);
        var subProperty = item.GetProperty("subProperty");
        
        if (SubPropertyValueSatisfiesSpecificCondition(subProperty.GetString()))
        {
            File.WriteAllText($"{i}.json", item.ToString());
            i++;
        }
    }
}

这个方案的优势在哪?

  1. 性能拉满:不需要把整个数组转成集合再反转,GetArrayElementAtIndex是直接访问底层数据,100个元素的场景下几乎没额外开销,比转List的方法高效得多
  2. 完美适配命名需求:倒着遍历原数组时,每找到一个符合条件的项就按0、1、2...编号,完全不用提前知道符合条件的项有多少
  3. 改动极小:只是把原来的foreach换成了倒序for循环,逻辑清晰,后续维护也方便

要是你还有其他关于System.Text.Json的细节问题,随时喊我!

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.08 07:33:06