Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 7 additions & 1 deletion bin/checkver.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -213,7 +213,13 @@ while ($in_progress -gt 0) {
}

if ($jsonpath) {
$ver = json_path $page $jsonpath
# Return only a single value if regex is absent
$noregex = [String]::IsNullOrEmpty($regex)
# If reverse is ON and regex is ON,
# Then reverse would have no effect because regex handles reverse
# on its own
# So in this case we have to disable reverse
$ver = json_path $page $jsonpath $null ($reverse -and $noregex) $noregex
if (!$ver) {
$ver = json_path_legacy $page $jsonpath
}
Expand Down
34 changes: 18 additions & 16 deletions lib/json.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -92,31 +92,33 @@ function ConvertToPrettyJson {
}
}

function json_path([String] $json, [String] $jsonpath, [Hashtable] $substitutions) {
function json_path([String] $json, [String] $jsonpath, [Hashtable] $substitutions, [Boolean] $reverse, [Boolean] $single) {
Add-Type -Path "$psscriptroot\..\supporting\validator\bin\Newtonsoft.Json.dll"
if ($null -ne $substitutions) {
$jsonpath = substitute $jsonpath $substitutions ($jsonpath -like "*=~*")
}
try {
$obj = [Newtonsoft.Json.Linq.JObject]::Parse($json)
$obj = [Newtonsoft.Json.Linq.JValue]::Parse($json)
} catch [Newtonsoft.Json.JsonReaderException] {
try {
$obj = [Newtonsoft.Json.Linq.JArray]::Parse($json)
} catch [Newtonsoft.Json.JsonReaderException] {
return $null
}
return $null
}

try {
try {
$result = $obj.SelectToken($jsonpath, $true)
} catch [Newtonsoft.Json.JsonException] {
return $null
$result = $obj.SelectTokens($jsonpath, $true)
if ($reverse) {
# Return versions in reverse order
$result = [System.Linq.Enumerable]::Reverse($result)
}
return $result.ToString()
} catch [System.Management.Automation.MethodInvocationException] {
write-host -f DarkRed $_
return $null
if ($single) {
# Extract First value
$result = [System.Linq.Enumerable]::First($result)
# Convert first value to string
$result = $result.ToString()
} else {
$result = "$([String]::Join('\n', $result))"
}
return $result
} catch [Exception] {
Write-Host $_ -ForegroundColor DarkRed
}

return $null
Expand Down