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

时间:2015-01-25 09:57:51

标签: c# json json.net

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

item.GetValue("text.English.Status") 

但我不知道它会是哪种语言。

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

我该如何做到这一点?

我试过这样的事情:

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

确实它给了我当前的令牌,但是我找不到一种方法来提取值而不知道它的确切位置。

示例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İ? ⬛⬜❤"
}

由于

1 个答案:

答案 0 :(得分:1)

你关闭了。您需要做的是找到其中JProperty包含您的目标字符串的JObject中的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);

小提琴:https://dotnetfiddle.net/okGdx9

如果您想使用Regex,可以在上面的代码中将p.Name.Contains(".Status")替换为Regex.IsMatch(p.Name, @"text\..*\.Status")