首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用Powershell将JSON数据转换为属性格式

使用Powershell将JSON数据转换为属性格式
EN

Stack Overflow用户
提问于 2021-06-29 06:38:19
回答 1查看 149关注 0票数 0

我正在努力解决一个挑战,但由于缺乏经验,遇到了一个障碍。我非常感谢来自这个网站的专家们的帮助:)

我需要将JSON输入转换成属性格式。示例:给定JSON:

代码语言:javascript
运行
AI代码解释
复制
{
  "name": "John",
  "age": 30,
  "married": True,
  "cars": [
    {"model": "BMW 230", "mpg": 27.5},
    {"model": "Ford Edge", "mpg": 24.1}
  ]}

脚本执行后,需要将其转换为以下格式:

代码语言:javascript
运行
AI代码解释
复制
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管道中,所以在线版本对我来说是行不通的。

任何帮助都将不胜感激!

EN

回答 1

Stack Overflow用户

发布于 2021-06-29 07:49:24

这种带有等号且不再标点的格式在PowerShell和其他地方称为PowerShell格式。

PowerShell实际上已经有了ConvertFrom-StringData函数,但没有ConvertTo-StringData函数。

但是,我们可以自己做,但是它需要一些助手函数来完成。

我觉得这很有趣,所以我今天试了一试。

下面是调用函数的样子:

代码语言:javascript
运行
AI代码解释
复制
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
        }
    }
}

它依赖于这些助手函数来工作。

代码语言:javascript
运行
AI代码解释
复制
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++
    }
    
}

这是输出:

以下是作为github gist的完整代码,供后人使用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68180889

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档