我正在努力解决一个挑战,但由于缺乏经验,遇到了一个障碍。我非常感谢来自这个网站的专家们的帮助:)
我需要将JSON输入转换成属性格式。示例:给定JSON:
{
"name": "John",
"age": 30,
"married": True,
"cars": [
{"model": "BMW 230", "mpg": 27.5},
{"model": "Ford Edge", "mpg": 24.1}
]}
脚本执行后,需要将其转换为以下格式:
name="John"
age=30
married=true
cars.0.model="BMW 230"
cars.0.mpg=27.5
cars.1.model="Ford Edge"
cars.1.mpg=24.1
我找到了一个在线转换器,它可以工作:https://tools.fromdev.com/json-to-property-converter.html
但是因为在我的例子中,我需要集成到Azure管道中,所以在线版本对我来说是行不通的。
任何帮助都将不胜感激!
发布于 2021-06-29 07:49:24
这种带有等号且不再标点的格式在PowerShell和其他地方称为PowerShell格式。
PowerShell实际上已经有了ConvertFrom-StringData
函数,但没有ConvertTo-StringData
函数。
但是,我们可以自己做,但是它需要一些助手函数来完成。
我觉得这很有趣,所以我今天试了一试。
下面是调用函数的样子:
Function ConvertTo-StringData($object, $propertyOverride){
$fields = $object | get-member -MemberType NoteProperty
foreach($field in $fields){
if (IsArray($field)){
OutputArrayMember -object $object -field $field
}
else{
OutputMember -object $object -propertyName $field.name -propertyOverride $propertyOverride
}
}
}
它依赖于这些助手函数来工作。
Function IsArray($object){
$object.Definition -match '.*\[\].*'
}
Function OutputMember($object,$propertyName, $propertyOverride){
if ($propertyOverride){
"$($propertyOverride).$($propertyName)=$($object.$($propertyName))"
}
else{
"$($propertyName)=$($object.$($propertyName))"
}
}
Function OutputArrayMember($object, $field){
$base = $field.Name
$i = 0
foreach ($item in $object.$($field.Name)){
ConvertTo-StringData -object $object.$($field.Name)[$i] -propertyOverride "$base[$i]"
$i++
}
}
这是输出:
https://stackoverflow.com/questions/68180889
复制