Начните с представления вашего JSON в виде строки:
$myjson = @'
{
"Name": "AllZones_APOPreface_GeographyMatch_FromBRE_ToSTR",
"Sequence": 0,
"Condition": "this.TripOriginLocationCode==\"BRE\"&&this.TripDestinationLocationCode==\"STR\"",
"Action": "this.FeesRate=0.19m;this.ZoneCode=\"Zone1\";halt",
"ElseAction": ""
}
'@
Затем создайте регулярное выражение, которое соответствует всем значениям от \"
до \"
длиной не более 10 символов (иначе это будетсопоставить нежелательные результаты).
$regex = [regex]::new('\\"(?<content>.{1,10})\\"')
Затем выполните сравнение с регулярным выражением, вызвав метод Matches()
для регулярного выражения.Передайте строку JSON в параметры метода как текст, с которым вы хотите выполнить сравнение.
$matchlist = $regex.Matches($myjson)
Наконец, возьмите группу совпадений content
, определенную в регулярном выражении, и извлекитезначения из него.
$matchlist.Groups.Where({ $PSItem.Name -eq 'content' }).Value
Результат
BRE
STR
Zone1
Подход № 2: Используйте регулярные выражения Regex для более точного сопоставления
Вот более конкретное регулярное выражение, которое используетупущения для правильной проверки каждого поля.Затем мы присваиваем каждому совпадению имя переменной, удобной для разработчика.
$regex = [regex]::new('(?<=TripOriginLocationCode==\\")(?<OriginCode>\w+)|(?<=TripDestinationLocationCode==\\")(?<DestinationCode>\w+)|(?<=ZoneCode=\\")(?<ZoneCode>\w+)')
$matchlist = $regex.Matches($myjson)
### Assign each component to its own friendly variable name
$OriginCode, $DestinationCode, $ZoneCode = $matchlist[0].Value, $matchlist[1].Value, $matchlist[2].Value
### Construct a string from the individual components
'Your origin code is {0}, your destination code is {1}, and your zone code is {2}' -f $OriginCode, $DestinationCode, $ZoneCode
Результат
Your origin code is BRE, your destination code is STR, and your zone code is Zone1