【发布时间】:2017-12-15 06:38:13
【问题描述】:
我有一个 JToken 列表,我需要确定是否有任何令牌包含某个值。例如,我需要知道令牌列表中是否包含单词“Checking”。列表中的第一个 JToken 包含值“Checking 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();
【问题讨论】:
-
1) 为什么要搜索列表而不迭代列表和检查每个标记?你是什么意思? 2)你能提供一个minimal reproducible example吗? 3) 标记是原子
JValue值还是它们可以是搜索词深度嵌套的容器? -
嗯,基本上我有两个列表,我想知道一个列表是否包含另一个列表中的值。如果两个列表都包含值,我们将执行一项操作,如果两个列表都不包含值,我们将执行另一项操作。
-
能否在您的示例代码中提供 testlist 的定义。
-
当然,我添加了一些更新@DylanNicholson
-
如何访问单个
JToken的字符串值?