Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# JArray-按关键字名称搜索对象_C#_Json - Fatal编程技术网

C# 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类型的对象,它包含一个json对象列表。JArray看起来像:

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)
。酷!只是使用较旧的编译器,所以不希望代码出现语法错误。请随意使用较新的语法修改代码。