尝试在 jsonpath 查询中使用两个 && 语句,但我无法获得我想要执行的逻辑
public List<Step> GetBuildSteps()
{
var rule1 = "Npm@1";
var rule2 = "npm build";
var rule3 = "Npm@0";
var rule4 = "Build";
var queryString = string.Format("$..steps[?(@.task == '{0}' &&
@.displayName =~ /^.*{1}.*$/ || @.task == '{2}' && @.displayName =~
/^.*{3}.*$/) ]", rule1, rule2, rule3, rule4);
return queryJson(queryString);
}
private List<Step> queryJson(String queryString)
{
var values = json.SelectTokens(queryString).ToList();
Console.WriteLine(queryString);
Console.WriteLine(JsonConvert.SerializeObject(values,
Formatting.Indented));
return
JsonConvert.DeserializeObject<List<Step>
(JsonConvert.SerializeObject(values, Formatting.Indented));
}
这是我的 JSON 示例:
{
"steps":[
{
"task":"Npm@1",
"displayName":"Dev - npm build",
"inputs":{
"filename":"tsc",
"arguments":"-p $(build.sourcesDirectory)\\SelfServeAdminExtn"
},
"enabled":"false",
"continueOnError":"true"
},
{
"task":"Npm@1",
"displayName":"Install Packages",
"inputs":{
"filename":"tfx"
},
"enabled":"false",
"condition":"succeededOrFailed()"
},
{
"task":"Npm@0",
"displayName":"Preprod - Build",
"inputs":{
"filename":"copy",
"arguments":"$(build.sourcesDirectory)\\ config.ts / y"
}
}
]
}
我希望语句 ?(condition1 && condition2 || condition3 && condition4) 会起作用,但它不会。它仅在我执行 ?(condition1 && condition2) 时有效,但是当我与 condition3 和 condition4 结合时,我得到一个空列表。