C# JArray-按关键字名称搜索对象
我有一个JArray类型的对象,它包含一个json对象列表。JArray看起来像:C# JArray-按关键字名称搜索对象,c#,json,C#,Json,我有一个JArray类型的对象,它包含一个json对象列表。JArray看起来像: JArray jarray = [{"Key1":"v1"}, {"Key2":"v2"}, {"Key3":"v3"}] 现在我想从jarray中检索一个元素,以便该元素包含给定的键名,例如,获取其键名为Key2的元素,而不是Key1或Key3。在jarray中元素可能不总是在同一个位置,因此无法通过索引访问它的情况下,如何实现它?使用包Newtonsoft.Json.Linq中的Newtonsoft.Jso
JArray jarray = [{"Key1":"v1"}, {"Key2":"v2"}, {"Key3":"v3"}]
现在我想从jarray中检索一个元素,以便该元素包含给定的键名,例如,获取其键名为
Key2
的元素,而不是Key1
或Key3
。在jarray中元素可能不总是在同一个位置,因此无法通过索引访问它的情况下,如何实现它?使用包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();
}
在包
Newtonsoft.Json
中使用Newtonsoft.Json.Linq
执行此操作:
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();
}
您可以使用Linq的where子句来查询JArray。此代码将结果筛选为具有“Key1”且具有非null值的项
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();
您可以使用Linq的where子句来查询JArray。此代码将结果筛选为具有“Key1”且具有非null值的项
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();
使用数据的实际类表示是选项吗?使用数据的实际类表示是选项吗?请注意,在最新版本的C中,您可以执行
x Is JObject y&&y.ContainsKey(key)
。酷!只是使用较旧的编译器,所以不希望代码出现语法错误。请随意使用更新的语法修改代码。请注意,在最新版本的C中,您可以执行x is JObject y&&y.ContainsKey(key)
。酷!只是使用较旧的编译器,所以不希望代码出现语法错误。请随意使用较新的语法修改代码。