Powershell - json to text或csv

时间:2016-02-18 19:35:15

标签: json excel csv powershell

我有一个包含数百个json文件的文件夹&需要阅读它们&创建一个包含各种字段的输出文件&其中的价值观。

{
  "id": "02002010",
  "booktitle": "",
  "pagetitle": "Demo Page",
  "parent": "02002000",
  "img": [
    {
      "imgfile": "02A.png",
      "imgname": "02A.png"
    }
  ],
  "fmt": "",
  "entries": [
    {
      "itemid": "1",
      "partnumber": "1234567",
      "partdescription": "Washer",
      "partqty": "2",
      "Manufacturer": "ACME",
      "partdescriptionlocal": "Washer"
    },
    {
      "itemid": "2",
      "partnumber": "98765-B",
      "partdescription": "Screw",
      "partqty": "8",
      "Vendor": "Widget Inc",
      "TYPE": "Galv",
      "partdescriptionlocal": "Screw"
    }]
}

json文件通常具有相同的结构,除了"条目"可能包含其中的各个字段,从一个条目到下一个条目可能不相同,或者一个json文件到下一个。有些人可能在条目中有字段,我不知道其名称。每个"条目中都会有一些共同的字段。部分,但它们可能会有所不同,并且可能与显示的顺序不同。

我想将输出写入一个text / csv文件,该文件将被分隔,然后可以导入到Excel中。列出了所有字段的一个列标题。作为新的"条目"找到字段,将它们粘贴到每行的末尾。也加入标题。

1 个答案:

答案 0 :(得分:1)

你的意思是做这样的事情?

$json = gc C:\temp\file.json | ConvertFrom-Json

$props = $json.entries | % {$_ | gm -MemberType NoteProperty} | select -exp name -Unique

$results = @()
foreach ($entry in $json.entries) {
    $obj = $json | select *
    foreach ($prop in $props) {
        $obj | Add-Member -MemberType NoteProperty -Name $prop -Value $($entry | select -exp $prop -ea 0)
    }
    $results += $obj
}
$results | epcsv C:\temp\file.csv -NoTypeInformation -Encoding ASCII
$results