检查字符串是否出现在JValues列表中

时间:2018-02-13 16:09:27

标签: c# json

我有一些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是否包含此字符串值。

3 个答案:

答案 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")) {
 //...
}