2017-10-12 177 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