我试图在powershell中获取特定字符中的值。基本上我有一个像这样的数千个对象的json
"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": ""
我想要一切都在\" \"
IE在这里我会看到BRE和STR是Zone1
我所需要的只是输出的3件事。
我一直在寻找如何使用ConvertFrom-Json做到但没有成功,也许我还没有找到一篇关于此的好文章。
由于
答案 0 :(得分:1)
首先将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
这是一个更具体的正则表达式,它使用后视来适当地验证每个字段。然后我们将每个匹配分配给开发人员友好的变量名称。
$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