使用JPATH,如何在另一个JSON字符串中选择JSON值?

时间:2017-01-06 20:33:23

标签: json json.net

我从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]]]

1 个答案:

答案 0 :(得分:1)

您无法通过单个JsonPath查询从根对象中提取路径值,因为2011-02-11T00:00:00Z属性的值只是一个字符串文字,它本身就是重新序列化的JSON。在首次修剪value字符后,需要将其提取并递归解析为JSON,而Json.NET在当前版本9.0.1中没有内置query operator。< / p>

因此,您需要执行以下操作:

#

示例fiddle

相关问题