使用PowerShell将XML转换为特定的JSON结构

时间:2014-11-03 02:28:46

标签: xml json powershell

需要有关将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家伙,并且不知道如何使用powershell,除了调用远程ftp服务器和读取所有xml文件。 真的很感激,如果有人可以帮助我。

1 个答案:

答案 0 :(得分:12)

XML Stuff

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

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

ConvertTo-Xml cmdlet接受字符串或其他对象并将其转换为XML,可以是Document(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 Stuff

在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
    } 
}

REST

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

如何继续

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

$mySpecialHash | ConvertTo-JSON

特别注意如何在生成的JSON中表示数组和散列,并且可能会改变构建它们的方式以获得所需的输出。

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

参考

XML

JSON

REST