blu*_*bel 4 xml powershell json
需要帮助将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>
Run Code Online (Sandbox Code Playgroud)
可以有上述格式的一个或多个文件,我的要求是读取所有这些文件并按所有者分组,并通过将这些对象转换为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"
}
]
}
]
Run Code Online (Sandbox Code Playgroud)
}
这需要使用windows powershell完成,Iam是一个java人,并且不知道如何使用powershell,除了调用远程ftp服务器和读取所有xml文件.真的很感激,如果有人可以帮助我.
bri*_*ist 13
Powershell有一些用于处理XML的东西.首先,它具有本机[XML]数据类型.您可以将字符串转换为XML,如下所示:
$someXml = '...' # pretend there's XML in there!
$xmlObject = [XML]$someXml
Run Code Online (Sandbox Code Playgroud)
的ConvertTo-Xml小命令以一个字符串或其它对象,并将其转换为XML,无论是作为一个文件(XML对象),一个字符串,或流(字符串数组).你可以传递一个字符串或一个对象:
$xmlObject = [XML](Get-Content -Path C:\Path\to\my.xml)
$xmlObject = Get-Content -Path C:\Path\to\my.xml | ConvertTo-Xml
Run Code Online (Sandbox Code Playgroud)
获得对象后,可以将节点作为属性访问:
$xmlObject.SomeNode.SomeChild
Run Code Online (Sandbox Code Playgroud)
您还可以使用XPATH选择单个节点或多个节点:
$xmlObject.SelectSingleNode("//this[1]")
$xmlObject.SelectNodes("//these")
Run Code Online (Sandbox Code Playgroud)
或者以更多Select-XmlPowerShell 方式执行此操作,您可以使用cmdlet:
$xmlObject | Select-Xml "//these"
Run Code Online (Sandbox Code Playgroud)
我遗漏了很多其他的东西,特别是操作,因为你似乎只需要找到信息并将它们组合在一起.
在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
Run Code Online (Sandbox Code Playgroud)
值可以是数组,对象,另一个哈希等.
$complex = @{
ThisThing = @{
Key1 = 'val1'
Key2 = 5
}
}
Run Code Online (Sandbox Code Playgroud)
Invoke-RestMethod 是在Powershell中进行REST调用的最简单方法(需要3.0+版本).
一旦您能够从XML解析信息,构建包含所需结构的嵌套哈希或哈希数组,然后将其转换为JSON:
$mySpecialHash | ConvertTo-JSON
Run Code Online (Sandbox Code Playgroud)
请特别注意如何在生成的JSON中表示数组和哈希,并且可能会更改构建它们的方式以获得所需的输出.
如果您对特定方法或代码片段有特定问题,请在SO上发布有关该片段的具体问题.
| 归档时间: |
|
| 查看次数: |
14777 次 |
| 最近记录: |