我正在尝试使用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表达式是什么?匹配子字符串也可以,但同样,我找不到这样做的例子。
答案 0 :(得分:1)
解决方法是使用linq。
选择所有状态对象,过滤代码值,该代码值已转换为字符串以使用contains方法。
var x = myJsonJObject.SelectToken("$.statuses").Where(y => ((string)y.SelectToken("$.code")).Contains("PowerState"));