【问题标题】:Convert XML to specific JSON structure with powershell使用 powershell 将 XML 转换为特定的 JSON 结构
【发布时间】:2014-12-29 16:16:47
【问题描述】:

在将 xml 转换为特定 json 结构时需要帮助。 XML 看起来像这样,

<DataGrid> 
<DataRow>
    <RowID>1</RowID>
    <Date>26/10/2014</Date>
    <Owner>ABC Company</Owner>        
    <Make>Mitsubishi</Make>
    <Model_Family>Lancer</Model_Family>
    <Submodel>Lancer 2.0 GSR Hatch CVT</Submodel>
    <Origin/>
    <CC_Rating>1997</CC_Rating>
    <Weight>2000</Weight> 
</DataRow> 
<DataRow>
    <RowID>2</RowID>
    <Date>26/10/2014</Date>
    <Owner>ABC Company</Owner>        
    <Make>Mazda</Make>
    <Model_Family>Axela</Model_Family>
    <Submodel/>
    <Origin>Japan</Origin>
    <CC_Rating>1497</CC_Rating>
    <Weight/> 
</DataRow>
 <DataRow>
    <RowID>3</RowID>
    <Date>26/10/2014</Date>
    <Owner>Test Company</Owner>        
    <Make>Kia</Make>
    <Model_Family>Sorento</Model_Family>
    <Submodel/>
    <Origin>Korea</Origin>
    <CC_Rating>2200</CC_Rating>
    <Weight>2500<Weight> 
</DataRow>
<DataRow>
    <RowID>4</RowID>
    <Date>26/10/2014</Date>
    <Owner>Test Company</Owner>        
    <Make>Nissan</Make>
    <Model_Family>Pathfinder</Model_Family>
    <Submodel>SUV<Submodel>
    <Origin>Japan</Origin>
    <CC_Rating>2000</CC_Rating>
    <Weight>2000<Weight> 
</DataRow>

可以有一个或多个上述格式的文件,我的要求是读取所有这些文件并按所有者对它们进行分组,并通过将这些对象转换为 JSON 来调用 REST Web 服务。所需的 JSON 格式如下。

{
"batches": [
    {
        "Owner": "ABC Company",
        "Date": "2014-10-26",
        "Vehicles": [
            {                    
                "Make": "Mitsubishi",
                "ModelFamily": "Lancer",
                "SubModel": "Lancer 2.0 GSR Hatch CVT",
                "Origin": null
                "CcRating": "1997",
                "Weight": "2000"                    
            },
            {                   
                "Make": "Mazda",
                "ModelFamily": "Axela",
                "SubModel": null,
                "Origin": "Japan",
                "CcRating": "1497",
                "Weight": null                   
            }
        ]
    },
    {
        "Owner": "Test Company",
        "Date": "2014-10-26",
        "Vehicles": [
            {                   
                "Make": "Kia",
                "ModelFamily": "Sorento",
                "SubModel": null,
                "Origin": "Korea",
                "CcRating": "2200",
                "Weight": "2500"                  
            },
            {                    
                "Make": "Nissan",
                "ModelFamily": "Pathfinder",
                "SubModel": "SUV",
                "Origin": "Japan",
                "CcRating": "2000",
                "Weight": "2000"                   
            }
        ]
    }
]

}

这需要使用 windows powershell 来完成,我是一个 java 人,除了调用远程 ftp 服务器并读取所有 xml 文件外,不知道如何使用 powershell 来完成。 真的很感激,如果有人可以帮助我。

【问题讨论】:

    标签: xml json powershell


    【解决方案1】:

    XML 东西

    Powershell 有一些用于处理 XML 的东西。首先,它有一个原生的[XML] 数据类型。您可以像这样将字符串转换为 XML:

    $someXml = '...' # pretend there's XML in there!
    $xmlObject = [XML]$someXml
    

    ConvertTo-Xml cmdlet 接受字符串或其他对象并将其转换为 XML,可以是文档(XML 对象)、字符串或流(字符串数组)。您可以将字符串或对象传递给它:

    从文件中读取:

    $xmlObject = [XML](Get-Content -Path C:\Path\to\my.xml)
    $xmlObject = Get-Content -Path C:\Path\to\my.xml | ConvertTo-Xml
    

    使用 XML 对象

    获得对象后,您可以将节点作为属性访问:

    $xmlObject.SomeNode.SomeChild
    

    您也可以使用 XPATH 选择单个节点或多个节点:

    $xmlObject.SelectSingleNode("//this[1]")
    $xmlObject.SelectNodes("//these")
    

    或者以更强大的方式执行此操作,您可以使用 Select-Xml cmdlet:

    $xmlObject | Select-Xml "//these"
    

    我省略了很多其他内容,尤其是操纵,因为您似乎只需要查找信息并将其组合在一起。

    JSON 东西

    关于 Powershell 中的 JSON 了解不多。

    使用ConvertFrom-JSON将现有的JSON转换为对象,使用ConvertTo-JSON将对象转换为JSON字符串。

    哈希表

    我相信您知道,有时也称为哈希或关联数组。在 Powershell 中,您可以像这样使用它们:

    $hash = @{
        Key1 = 'Value1'
        Key2 = 'Value2'
        Key3 = 10
    }
    
    # on one line:
    $hash = @{ Key1='Val1';Key2='Val2' }
    
    # adding pairs
    $hash['NewKey'] = 'NewVal'
    $hash.NewKey = 'NewVal'
    
    # retrieving
    $hash['NewKey']
    $hash.NewKey
    

    值可以是数组、对象、另一个哈希等

    $complex = @{
        ThisThing = @{
            Key1 = 'val1'
            Key2 = 5
        } 
    }
    

    休息

    Invoke-RestMethod 是在 Powershell 中进行 REST 调用的最简单方法(需要 3.0+ 版本)。

    如何进行

    一旦您能够从 XML 中解析出信息,构建一个包含所需结构的嵌套哈希或哈希数组,然后将其转换为 JSON:

    $mySpecialHash | ConvertTo-JSON
    

    请特别注意数组和哈希在生成的 JSON 中的表示方式,并可能更改构建它们的方式以获得所需的输出。

    如果您对特定方法或代码段有特定问题,请在 SO 上发布有关该段代码的特定问题。

    参考文献

    XML

    JSON

    休息

    【讨论】:

    • 这个答案确实帮助我完成了我的任务,因此接受为答案
    猜你喜欢
    • 2014-12-31
    • 1970-01-01
    • 1970-01-01
    • 2021-05-20
    • 2010-10-31
    • 2021-07-14
    • 2022-01-27
    • 1970-01-01
    • 2015-02-05
    相关资源
    最近更新 更多