Не удается получить вложенное свойство с помощью jsonpath - PullRequest
0 голосов
/ 10 января 2019

Используя jsonpath, я хочу получить вложенное свойство json, но не могу этого сделать. Поиск по запросу не возвращает никакого значения, хотя он должен

 public List<Step> GetBuildSteps()
    {             
     queryString = string.Format("$..steps[?(@.task == '{0}' &&  @.inputs.inlineScript =~ /^.*{1}.*$/)]", "PowerShell@1", "BUILD_BUILDNUMBER");

        return queryJson(queryString);
    }

  private List<Step> queryJson(String queryString){
        var values = json.SelectTokens(queryString).ToList();

        return JsonConvert.DeserializeObject<List<Step>>(JsonConvert.SerializeObject(values, Formatting.Indented,
        new JsonSerializerSettings
        {
            NullValueHandling = NullValueHandling.Ignore
        }));
    }

 Here's the json: 
   {  
    "steps":[  
     {  
     "task":"NodeTool@0",
     "displayName":"Use Node 8.x",
     "inputs":{  
        "versionSpec":"8.x"
     }
    },
    {  
     "task":"Npm@0",
     "displayName":"npm install tfx globally",
     "inputs":{  
        "arguments":"npm i -g tfx-cli  ",
        "cwd":"SelfServeAdminExtn"
     }
    },
    {  
     "task":"Npm@1",
     "displayName":"Install packages",
     "inputs":{  

     }
    },
    {  
     "task":"PowerShell@1",
     "displayName":"Preprod - PowerShell Script",
     "inputs":{  
        "scriptType":"inlineScript",
        "inlineScript":"Write-Host \"Setting package version to \" + $Env:BUILD_BUILDNUMBER\n\n$pathToJson = \"SelfServeAdminExtn\\vss-extension-preprod.json\"\n$a = Get-Content $pathToJson | ConvertFrom-Json\n$a.version = $Env:BUILD_BUILDNUMBER\n$a | ConvertTo-Json -Depth 10 | set-content $pathToJson\n"
     }
    },
    {  
     "task":"CmdLine@1",
     "displayName":"Preprod - Copy config",
     "inputs":{  
        "arguments":"$(build.sourcesDirectory)\\SelfServeAdminExtn\\scripts\\config-preprod.ts $(build.sourcesDirectory)\\SelfServeAdminExtn\\scripts\\config.ts /y"
     }
    }
  ]
}

Результирующий запрос: $ .. steps [? (@. Task == 'PowerShell @ 1' && @ .inputs.inlineScript = ~ /^.BUILD_BUILDNUMBER.$/)] который должен дать один результат, но в данном случае это не

...