我有一些JSON,我检查并解析为JArray。 JSON与此类似:
"required" : [ "1", "2" ]
现在解析时,结果是一个JValues数组。我想检查我的字符串是否出现在此列表中。所以,要做到这一点,我做:
JArray requiredArray = JArray.Parse(myJson["required].ToString());
bool exists = requiredArray.Contains("1");
这回来是假的,我认为这是因为它将JValue与字符串进行比较。我尝试将字符串转换为JValue,如下所示:
JValue itemValue = JValue.Parse("1");
它不是那样的,说无法将JToken转换为JValue。
我需要知道的是,我的JArray是否包含此字符串值。
答案 0 :(得分:3)
您可以使用Any
:
bool exists = requiredArray.Any(t => t.Value<string>() == "1");
答案 1 :(得分:1)
您可以将JArray转换为字符串数组,这样您就可以这样做.Contains()就像您最初想要的那样:
string[] strings = requiredArray.ToObject<string[]>();
bool exists = strings.Contains("1");
答案 2 :(得分:0)
.Contains()
在这种情况下不起作用,因为如JArray.Contains issue中所述,JArray
比较的是引用,而不是实际的值。 (这也是为了回答Patrick在回答中的评论。)
您可以做这样的事情:
public static bool ContainsString(this JArray jArray, string s)
{
return jArray.Any(x => x.ToString().Equals(s));
}
并像这样使用它:
if (requiredArray.ContainsString("1")) {
//...
}