如何使用 属性 名称的部分匹配从 JObject 获取值
How to get a value from a JObject using a partial match on the property name
我有一个 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İ? ⬛⬜❤"
}
谢谢
你很接近。您需要做的是在 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);
Fiddle: https://dotnetfiddle.net/okGdx9
如果要使用正则表达式,可以将上面代码中的p.Name.Contains(".Status")
替换为Regex.IsMatch(p.Name, @"text\..*\.Status")
。
我有一个 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İ? ⬛⬜❤"
}
谢谢
你很接近。您需要做的是在 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);
Fiddle: https://dotnetfiddle.net/okGdx9
如果要使用正则表达式,可以将上面代码中的p.Name.Contains(".Status")
替换为Regex.IsMatch(p.Name, @"text\..*\.Status")
。