2017-01-06 92 views
1

我有以下JSON(簡化/縮小以示出僅相關部分)從web服務返回:如何使用JPATH在另一個JSON字符串中選擇一個JSON值?

{ 
    "results": [{ 
     "paramName": "OutputPolyline", 
     "dataType": "String", 
     "value": "#{\"hasM\":true,\"paths\":[[[135.24,246.13,null],[135.24,246.13,null] ... [135.24,246.13,null]]]}" 
    }], 
    "messages": [] 
} 

我使用下面的代碼來解析JSON和搶「值」的值的密鑰:

JObject obj = JObject.Parse(json); 
JToken token = obj.SelectToken("$.results[?(@.paramName == 'OutputPolyline')]['value']"); 

Console.WriteLine(token.Path + " -> " + token); 

上面的代碼返回預期整個value字符串,像這樣"#{\"hasM\":true,\"paths\":[[[135.24,246.13,null],[135.24,246.13,null] ... [135.24,246.13,null]]]}"

大廈上面的代碼,我怎麼得到才值關鍵?在這個例子中,僅返回[[[135.24,246.13,null],[135.24,246.13,null] ... [135.24,246.13,null]]]

回答

1

無法通過單一的JsonPath查詢提取根對象的路徑值,因爲value屬性的值只是一個字符串字面量出現這種情況本身重新序列化JSON。在首先修剪掉#字符後,它需要提取並遞歸地解析爲JSON,而Json.NET沒有內置的query operator來做到這一點,就像當前版本9.0.1一樣。

因此,你需要做的是這樣的:

JToken token = obj.SelectToken("$.results[?(@.paramName == 'OutputPolyline')]['value']"); 

var paths = JToken.Parse(token.ToString().Trim('#')).SelectToken("paths"); 

fiddle

相關問題