JArray-通过键名搜索对象

时间:2018-08-24 18:26:02

标签: c# json

我有一个JArray类型的对象,其中包含json对象的列表。 JArray看起来像:

JArray jarray = [{"Key1":"v1"}, {"Key2":"v2"}, {"Key3":"v3"}]

现在,我想从jarray中检索一个元素,以便该元素包含给定的键名,例如,获取其键名为Key2而不是Key1Key3的元素。在元素可能不总是位于行列中的同一位置从而无法按索引访问的情况下,如何实现它?

2 个答案:

答案 0 :(得分:2)

使用软件包Newtonsoft.Json.Linq中的Newtonsoft.Json来做到这一点:

private static JToken[] SearchKey(JArray jarray, string key, bool ignoreCase)
{
    return jarray.Where(x => x is JObject ? ((JObject)x).ContainsKey(key) : false).ToArray();
}

在最新版本的C#中,您还可以使用以下方法将其缩短一点:

private static JToken[] SearchKey(JArray jarray, string key, bool ignoreCase)
{
    return jarray.Where(x => x is JObject y && y.ContainsKey(key)).ToArray();
}

答案 1 :(得分:0)

您可以使用Linq的where子句查询JArray。此代码将结果过滤到具有“ Key1”且具有非空值的项目。

using System.Linq;
using Newtonsoft.Json.Linq;

JArray jarray = JArray.Parse("[{ \"Key1\":\"v1\"}, { \"Key2\":\"v2\"}, { \"Key3\":\"v3\"}]");
var result = jarray.Where(v => v["Key1"] != null).ToList();