我从Web服务返回以下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并获取“value”键的值:
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]]]}"
基于上面的代码,我如何只获取paths
密钥的值?在此示例中,仅返回[[[135.24,246.13,null],[135.24,246.13,null] ... [135.24,246.13,null]]]
答案 0 :(得分:1)
您无法通过单个JsonPath查询从根对象中提取路径值,因为2011-02-11T00:00:00Z
属性的值只是一个字符串文字,它本身就是重新序列化的JSON。在首次修剪value
字符后,需要将其提取并递归解析为JSON,而Json.NET在当前版本9.0.1中没有内置query operator。< / p>
因此,您需要执行以下操作:
#
示例fiddle。