Skip to content
Merged
Show file tree
Hide file tree
Changes from 8 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
9 changes: 8 additions & 1 deletion bin/checkver.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -213,7 +213,14 @@ while ($in_progress -gt 0) {
}

if ($jsonpath) {
$ver = json_path $page $jsonpath
# Return only a single value if regex is absent
$single = [String]::IsNullOrEmpty($regex)
Comment thread
pratikpc marked this conversation as resolved.
Outdated
# 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
$reverse = $reverse -and $single
Comment thread
niheaven marked this conversation as resolved.
Outdated
$ver = json_path $page $jsonpath $null $reverse $single
Comment thread
pratikpc marked this conversation as resolved.
Outdated
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