Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.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# 如何使用属性名的部分匹配从JObject获取值_C#_Json_Json.net - Fatal编程技术网

C# 如何使用属性名的部分匹配从JObject获取值

C# 如何使用属性名的部分匹配从JObject获取值,c#,json,json.net,C#,Json,Json.net,我有一个JObject(Newtonsoft.json),我正在从中提取一些值。 我正在使用GetValue函数,例如: item.GetValue("text.English.Status") 但我不知道会是哪种语言 所以我想做一些类似正则表达式匹配的事情: text.*.Status 我怎样才能做到这一点 我试过这样的方法: item.First<JToken>(p => p.ToString().Contains("Status")) 谢谢很接近了。您需要做的是在J

我有一个
JObject
(Newtonsoft.json),我正在从中提取一些值。 我正在使用
GetValue
函数,例如:

item.GetValue("text.English.Status") 
但我不知道会是哪种语言

所以我想做一些类似正则表达式匹配的事情:
text.*.Status

我怎样才能做到这一点

我试过这样的方法:

item.First<JToken>(p => p.ToString().Contains("Status"))

谢谢

很接近了。您需要做的是在
JObject
中找到
JProperty
,它的
Name
包含您的目标字符串,然后从该属性获取值

以下是一个例子:

string json = @"
{
  ""string.Language"": ""Turkish"",
  ""text.English.FullName"": ""Aşk-ı Beşiktaş ❤"",
  ""text.English.ScreenName"": ""kardelensimsek9"",
  ""text.English.Status"": ""19.03 KARA TOPRAĞA BEYAZ KEFENLE GÖMÜLÜRKEN BAŞ UCUMUZA KONCAK SİYAH BEYAZ ATKININ HAYALİYLE YAŞIYORUZ. VAR MI ÖTESİ? ⬛⬜❤""
}";

JObject item = JObject.Parse(json);

JProperty prop = item.Properties().FirstOrDefault(p => p.Name.Contains(".Status"));
string value = prop != null ? prop.Value.ToString() : "(value not found)";

Console.WriteLine(value);
小提琴:


如果你想使用正则表达式,你可以在上面的代码中将
p.Name.Contains(“.Status”)
替换为
Regex.IsMatch(p.Name,@“text\..*\.Status”)

你能发布一个你的json示例吗?谢谢在上面的帖子中添加感谢你的回答。它对JSON中的键和值都有效吗?所以如果我的一些“值”包含.Status,道具可能会返回它们?我的意思是:{“string.English.FullName”:“Brian.Status Rogers”}不,我上面答案中的代码只查看属性名。您可以在小提琴中编辑代码,自己查看。
string json = @"
{
  ""string.Language"": ""Turkish"",
  ""text.English.FullName"": ""Aşk-ı Beşiktaş ❤"",
  ""text.English.ScreenName"": ""kardelensimsek9"",
  ""text.English.Status"": ""19.03 KARA TOPRAĞA BEYAZ KEFENLE GÖMÜLÜRKEN BAŞ UCUMUZA KONCAK SİYAH BEYAZ ATKININ HAYALİYLE YAŞIYORUZ. VAR MI ÖTESİ? ⬛⬜❤""
}";

JObject item = JObject.Parse(json);

JProperty prop = item.Properties().FirstOrDefault(p => p.Name.Contains(".Status"));
string value = prop != null ? prop.Value.ToString() : "(value not found)";

Console.WriteLine(value);