搜索JTokens列表的文本值

时间:2017-12-14 19:19:46

标签: c# linq json.net

我有一个JTokens列表,我需要确定是否有任何令牌包含某个值。例如,我需要知道令牌列表是否包含单词" Checking"。列表中的第一个JToken包含值"检查11010000"。

以下是一些实际编译的尝试。

var test1 = testlist.FirstOrDefault( i => i.Contains( "Checking" ) ); // returns null
var test2 = testlist.Any( x => x.Contains( "Checking" ) ); // returns false
var test3 = testlist.TrueForAll( x => x.Contains( "Checking" ) ); // returns false
var test4 = testlist.TrueForAll( x => x.Children().Contains( "Checking" ) ); // returns false
var test5 = testlist.Any( x => x.Children().Contains( "Checking" ) ); // returns false
var test6 = testlist.All( x => x.Children().Contains( "Checking" ) ); // returns false
var test7 = testlist.Find( x => x.Contains( "Checking" ) ); // returns null

如何在不迭代列表并检查每个令牌的情况下搜索JToken列表中的值?

更新

以下是相关JSON源代码的剪辑:

    {
       ...
       "Rows":{
          "Row":[
             {
                "ColData":[
                   {
                      "value":"Checking 11010000",
                      "id":"35"
                   },
                   {
                      "value":"232.40"
                   },
                   {
                      "value":""
                   }
                ]
             },
             {
                "ColData":[
                   {
                      "value":"Savings 11020000",
                      "id":"36"
                   },
                   {
                      "value":"800.00"
                   },
                   {
                      "value":""
                   }
                ]
             }
    ...
    }

这是我的名单宣布的方式

var testlist = PriorMonth.SelectTokens( "$..ColData[*].value" ).ToList();

这给了我一个看起来像的列表 enter image description here

1 个答案:

答案 0 :(得分:0)

您需要测试每个JToken的值,而不是IEnumerable<JToken> Contains的匹配JToken匹配var hasChecking = testlist.Any(jt => jt.Value<string>().Contains("Checking")); 的内容:

bind