C# 如何在另一个JSONPath表达式中使用JSONPath表达式作为过滤器?
我想通过使用JSONPath表达式和另一个嵌入在过滤器中的表达式进行过滤,从JSON字符串中选择对象。换句话说,我想筛选JSON数据中其他地方存在的值 例如: 在下面的JSON数据中,C# 如何在另一个JSONPath表达式中使用JSONPath表达式作为过滤器?,c#,json,json.net,jsonpath,C#,Json,Json.net,Jsonpath,我想通过使用JSONPath表达式和另一个嵌入在过滤器中的表达式进行过滤,从JSON字符串中选择对象。换句话说,我想筛选JSON数据中其他地方存在的值 例如: 在下面的JSON数据中,$.Item.State.stepId中有一个值(当前为“QG2.0”)。我需要一个JSONPath表达式,它根据这个值选择值,如下所示: $..Step[?(@.stepId==$Item.State.stepId)].actionDate $..Step[?(@.stepId=='QG2.0')].actio
$.Item.State.stepId
中有一个值(当前为“QG2.0”)。我需要一个JSONPath表达式,它根据这个值选择值,如下所示:
$..Step[?(@.stepId==$Item.State.stepId)].actionDate
$..Step[?(@.stepId=='QG2.0')].actionDate
但这不会返回任何结果。如果我像这样直接使用字符串(“QG2.0”):
$..Step[?(@.stepId==$Item.State.stepId)].actionDate
$..Step[?(@.stepId=='QG2.0')].actionDate
它将返回所需的数据
怎么了,还是根本不可能?我的JSON如下:
{
"Item": {
"Common": {
"folio": "PSH-000016020",
"setName": "123-XZ200-1",
"wfId": "Kat1_002",
"wfIssue": "002",
"wfIdIssue": "Kat1_002.002"
},
"State": {
"status": "IN WORK",
"stepId": "QG2.0",
"stepDescription": "Validation"
},
"Participants": {
"Participant": [
{
"role": "PR",
"roleDescription": "Product Responsible",
"loginName": "marc102",
"email": "mark@abc.de"
}, {
"role": "CR",
"roleDescription": "Chapter Responsible",
"loginName": "uli26819",
"email": "uli@abc.de"
}
]
},
"Steps": {
"Step": [
{
"stepId": "QG1.0",
"stepTitle": "Preparation",
"actionDate": "2016-06-28T10:28:09",
"actionDueDate": "",
"actionBy_Name": "Marc",
"actionBy_Account": "marc102",
"action": "complete",
"Comment": ""
}, {
"stepId": "QG2.0",
"stepTitle": "Check Requirements",
"actionDate": "2016-08-08T14:17:04",
"actionDueDate": "",
"actionBy_Name": "Uli",
"actionBy_Account": "uli26819",
"action": "complete",
"Comment": ""
}
]
}
}
}
我认为Json.Net对JSONPath的实现不支持这个概念。
但是,如果将查询分为两个步骤,您仍然可以获得所需的信息:
JObject obj = JObject.Parse(json);
JToken stepId = obj.SelectToken("Item.State.stepId");
JToken actionDate = obj.SelectToken(string.Format("$..Step[?(@.stepId=='{0}')].actionDate", stepId));
Console.WriteLine(actionDate.ToString());
小提琴手:嗨,布莱恩,谢谢你的回答。我考虑过,但希望有一个直接的解决方案;如果你有雄心壮志,你可以自己实现这个特性。