使用Powershell将XML转换为JSON

阿尔夫斯基

我正在尝试将xml文件转换为json以进行进一步处理。这实际上是我第一次使用Powershell,因此我需要一些帮助。

我得到一个具有以下结构的xml文件:

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="https://www.something..."?>
<tabela>
    <naslov>Robno knjigovodstvo - pregled automatskog stanja zaliha artikala</naslov>
    <dataset>qu1RobaZalihe</dataset>
    <datum_kreiranja>12.02.2021</datum_kreiranja>
    <zaglavlje><sifra>Šifra</sifra><naziv>Naziv</naziv><katbroj>Kataloški broj</katbroj><cfJedmj>JedMj</cfJedmj><stanje>Stanje</stanje><cijena>Nabavna cijena</cijena><datum>Datum dokumenta</datum></zaglavlje>
    <redovi>
            <red>
            <sifra>1</sifra>
            <naziv>CORE HIT</naziv>
            <katbroj>A4B0000006606</katbroj>
            <cfJedmj>KOM</cfJedmj>
            <stanje>1</stanje>
            <cijena>100,00</cijena>
            <datum>01.01.2021</datum>
        </red>
        <red>
            <sifra>2</sifra>
            <naziv>CORE HIT</naziv>
            <katbroj>A4B0000008340</katbroj>
            <cfJedmj>KOM</cfJedmj>
            <stanje>8</stanje>
            <cijena>100,00</cijena>
            <datum>01.01.2021</datum>
        </red>
        ...
    </redovi>
</tabela>

我需要像这样用逗号分隔的objets数组:

    [
    {
        "sifra":  "1",
        "naziv":  "CORE HIT 7050",
        "jed_mj":  "KOM",
        "kolicina":  "1",
        "skladiste":  "1",
        "pn":  "TNX:A4B0000006606"
    },
    {
        "sifra":  "2",
        "naziv":  "CORE HIT 7020",
        "jed_mj":  "KOM",
        "kolicina":  "8",
        "skladiste":  "1",
        "pn":  "TNX:A4B0000008340"
    },
    {
        "sifra":  "3",
        "naziv":  "SYSTEM SW LICENCE AND CD-ROM",
        "jed_mj":  "KOM",
        "kolicina":  "1",
        "skladiste":  "1",
        "pn":  "TNX:A4B0000007760"
    },
    ...
]

...但是我只能得到这样的对象:

    {
    "sifra":  "1",
    "naziv":  "CORE HIT 7050",
    "pn":  "TNX:A4B0000006606",
    "jed_mj":  "KOM",
    "kolicina":  "1",
    "skladiste":  "1"
}
{
    "sifra":  "2",
    "naziv":  "CORE HIT 7020",
    "pn":  "TNX:A4B0000008340",
    "jed_mj":  "KOM",
    "kolicina":  "8",
    "skladiste":  "1"
}
{
    "sifra":  "3",
    "naziv":  "SYSTEM SW LICENCE AND CD-ROM",
    "pn":  "TNX:A4B0000007760",
    "jed_mj":  "KOM",
    "kolicina":  "1",
    "skladiste":  "1"
}

到目前为止,我设法弄清了一些事情,但还不是全部:)我用来得到的代码如下:

[xml]$xml = Get-Content xml-skladiste.XML

foreach ($atr in $xml.tabela.redovi.red)
{
        $prop = [ordered]@{
        'sifra'    = $atr.sifra
        'naziv'    = $atr.naziv
        'pn'    = $atr.katbroj
        'jed_mj'    = $atr.cfJedmj
        'kolicina'    = $atr.stanje
        'skladiste' = "1"
    }
    New-Object -Type PSCustomObject -Property $prop | ConvertTo-Json | Add-Content -Path "output.json"
}

我必须添加什么才能获得理想的结构?

zett42

当前,您正在创建多个JSON文档,一个用于数组的每个元素,一个文档中$xml.tabela.redovi.red连接在一起。

ConvertTo-Json退出循环来解决这个问题。这样,您就ConvertTo-JSON可以将数据的创建与从JSON转换为JSON分开,从而可以对完整的数据结构进行操作。

[xml]$xml = Get-Content xml-skladiste.XML

$array = foreach ($atr in $xml.tabela.redovi.red)
{
    $prop = [ordered]@{
        'sifra'    = $atr.sifra
        'naziv'    = $atr.naziv
        'pn'    = $atr.katbroj
        'jed_mj'    = $atr.cfJedmj
        'kolicina'    = $atr.stanje
        'skladiste' = "1"
    }
    New-Object -Type PSCustomObject -Property $prop
}

$array | ConvertTo-Json | Set-Content -Path "output.json"

解释:

  • $array = foreach ...捕获变量中foreach循环的输出$array,自动创建一个数组。
  • New-Object ...产生捕获的输出。请注意,Write-Output由于PowerShell的隐式输出行为,因此我们不必使用阅读更多信息)。
  • $array | ConvertTo-Json ...将整个数组传递给的单个调用,ConvertTo-Json最后将其写入输出文件。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

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

来自分类Dev

使用Powershell将JSON转换为NDJSON

来自分类Dev

使用PostgreSQL将XML转换为JSON

来自分类Dev

使用XSLT将XML转换为JSON

来自分类Dev

使用PHP将JSON转换为XML

来自分类Dev

使用XSLT将JSON转换为Xml

来自分类Dev

使用Groovy将JSON转换为XML?

来自分类Dev

使用 xslt 将 xml 转换为 json

来自分类Dev

如何使用节点转换流将XML转换为JSON

来自分类Dev

使用Powershell .Net方法将XML转换为HTML

来自分类Dev

如何使用PowerShell 2.0将XML转换为CSV?

来自分类Dev

使用XML模式将XML转换为JSON

来自分类Dev

使用XML模式将XML转换为JSON

来自分类Dev

使用PowerShell将CSV转换为JSON和将JSON转换为CSV

来自分类Dev

将.xml转换为JSON

来自分类Dev

将 XML 转换为 JSON

来自分类Dev

尝试使用Powershell将复杂的JSON转换为CSV

来自分类Dev

将内部xml转换为powershell

来自分类Dev

将内部xml转换为powershell

来自分类Dev

使用Gson将XML文件转换为Json

来自分类Dev

无法使用Apache Camel 3.1.0将XML转换为JSON

来自分类Dev

如何使用xslt将嵌套的Json对象转换为xml

来自分类Dev

使用Mule Custom Transformer将XML转换为JSON

来自分类Dev

使用无效的节点名称将JSON转换为XML

来自分类Dev

如何使用 python 将 XML 转换为 JSON?

来自分类Dev

使用特定输出将 XML 批量转换为 JSON

来自分类Dev

使用 Java 将多行 JSON 转换为 XML

来自分类Dev

使用 XSLT 3.0 将 JSON 转换为 XML

来自分类Dev

将Powershell转换为嵌套Json