Trying to use two && statements within a jsonpath query but I can't get the logic I want performed
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));
}
Here's my JSON sample:
{
"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"
}
}
]
}
I expect that the statement ?( condition1 && condition2 || condition3 && condition4) will work but it doesn't. It works only when I do ?(condition1 && condition2) but when I combine with condition3 and condition4, I get an empty list.