2017-10-12 181 views
0

我想查询JArray并根据某些条件取回另一个JArray。现在,使用LINQ我可以先查询它,返回一个IEnumerable<JToken>并将其转换为另一种JArray这样的:使用SelectTokens查询JSON

IEnumerable<JToken> ienmTotalObjects = arrResults.Where(x => x["uResultId"]?.ToString() == arrTaskResults[intResult]["uResultId"].ToString() && x["iElementId"]?.ToString() == strUniqueElementId); 
JArray arrTotalObjects = new JArray(ienmTotalObject); 

现在我只是来了解JSON.NET SelectTokenshttps://www.newtonsoft.com/json/help/html/SelectToken.htm)和似乎是一个非常方便的功能查询而不转换为IEnumerable,但我无法找到一种方法来应用它在我的情况下。好奇它是否真的有可能?任何帮助表示赞赏。

+0

什么是JSON是什么样子?你能否提供一个样本[mcve]来显示你想要匹配的内容? – dbc

+0

@dbc是这样的:http://jsoneditoronline.org/?id=687dd987fa2bd1e253bbe57599be5a1f – izengod

+0

@BrianRogers请看这 – izengod

回答

1

从这个问题我可以猜到的arrResults 2个strcutures和arrTaskResults

var arrResults = JArray.Parse(@"[ 
{ iElementId: 1, ""uResultId"" :""aa"" }, 
{ iElementId: 2, ""uResultId"" :""bb"" } 
]"); 

var arrTaskResults = JArray.Parse(@"[ 
{ ""uResultId"" :""aa"" }, 
{ ""uResultId"" :""bb"" } 
]"); 

但是,我不知道什么intResultstrUniqueElementId那么这些现在在这里设置

var intResult = 0; 
var strUniqueElementId = "1"; 

我们可以做相同的查询,但使用传递给JPath的SelectToken方法:

var s = arrTaskResults.SelectToken($"$[{intResult}].uResultId"); 

var selectTokens = arrResults.SelectTokens($"$[?(@.uResultId=='{s}' && @.iElementId=={strUniqueElementId})]"); 

执行这将输出如下:

[ 
    { 
    "iElementId": 1, 
    "uResultId": "aa" 
    } 
] 
+0

抱歉,但我不熟悉与JPath查询事情..你能负担得起解释请((语法及其工作原理)? – izengod

+1

它非常类似于XPath(但是对于json),这可能有所帮助 - http://goessner.net/articles/JsonPath/ –

+0

非常感谢..现在将继续尝试一些动手:) – izengod