JSONPath中的通配符值

时间:2017-07-17 10:43:36

标签: c# json.net

我正在尝试使用json.net解释下面的JSON。

 {    
  "platformUpdateDomain": 0,    
  "platformFaultDomain": 0,    
  "vmAgent": {    
    "vmAgentVersion": "2.5.1198.709",    
    "statuses": [    
      {    
        "code": "ProvisioningState/succeeded",    
        "level": "Info",    
        "displayStatus": "Ready",    
        "message": "GuestAgent is running and accepting new configurations.",    
        "time": "2015-04-21T11:42:44-07:00"    
      }    
    ]    
  },    
  "disks": [    
    {    
      "name": "myosdisk",    
      "statuses": [    
        {    
          "code": "ProvisioningState/succeeded",    
          "level": "Info",    
          "displayStatus": "Provisioning succeeded",    
          "time": "2015-04-10T12:44:10.4562812-07:00"    
        }    
      ]    
    }    
  ],    
  "statuses": [    
    {    
      "code": "ProvisioningState/succeeded",    
      "level": "Info",    
      "displayStatus": "Provisioning succeeded",    
      "time": "2015-04-10T12:50:09.0031588-07:00"    
    },    
    {    
      "code": "PowerState/running",    
      "level": "Info",    
      "displayStatus": "VM running"    
    }    
  ]    
}    

我希望提取状态,其中代码包含以下值:

  

将PowerState

但是,我无法解决如何做到这一点,我可以使用Json.Net匹配整个字符串,但我想

myJsonJObject.SelectToken("$.statuses[?(@.code == 'PowerState/running')]");

但是,部分“代码”值可能会发生变化,所以我想尝试根据以下条件进行搜索

myJsonJObject.SelectToken("$.statuses[?(@.code == 'PowerState/*')]");

执行此操作的正确Jsonpath表达式是什么?匹配子字符串也可以,但同样,我找不到这样做的例子。

1 个答案:

答案 0 :(得分:1)

解决方法是使用linq。

选择所有状态对象,过滤代码值,该代码值已转换为字符串以使用contains方法。

var x = myJsonJObject.SelectToken("$.statuses").Where(y => ((string)y.SelectToken("$.code")).Contains("PowerState"));