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

如何通过Name字段值优雅地在JArray中查找对应项?

按Name字段查找JArray项的优雅写法

因为properties是JArray类型(本质是数组结构),而非JObject(键值对对象),所以直接用properties["HeatingData"]这种键索引的语法是无效的。下面是几种简洁实用的实现方式:

1. 单次查询:直接用LINQ匹配

利用LINQ的FirstOrDefault方法精准匹配Name字段,搭配空条件运算符避免空引用异常:

// 定位到Name为HeatingData的数组项
var heatingDataItem = properties.FirstOrDefault(item => item["Name"]?.ToString() == "HeatingData");
// 获取该项对应的Value对象(若未找到则返回null)
var heatingDataValue = heatingDataItem?["Value"];

如果确定目标项一定存在,可替换为First()方法,但FirstOrDefault()在找不到项时返回null,安全性更高。

2. 多次复用:封装扩展方法

如果需要频繁按Name查找JArray中的项,封装一个扩展方法能让代码更简洁:

public static class JArrayExtensions
{
    /// <summary>
    /// 按Name字段查找JArray中对应项的Value
    /// </summary>
    /// <param name="array">目标JArray</param>
    /// <param name="name">要匹配的Name值</param>
    /// <returns>匹配项的Value,未找到则返回null</returns>
    public static JToken? FindByName(this JArray array, string name)
    {
        return array.FirstOrDefault(item => item["Name"]?.ToString() == name)?["Value"];
    }
}

调用时只需一行代码:

var heatingData = properties.FindByName("HeatingData");

3. 多匹配项场景:获取所有结果

如果JArray中可能存在多个Name相同的项,用Where()方法获取全部匹配结果:

var allHeatingDataValues = properties.Where(item => item["Name"]?.ToString() == "HeatingData")
                                     .Select(item => item["Value"])
                                     .ToList();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 20:40:03