【问题标题】:Extracting fields to CSV from a JSON file with Powershell使用 Powershell 从 JSON 文件中提取字段到 CSV
【发布时间】:2021-08-07 15:05:14
【问题描述】:

我有一个从 API 中提取的 json,就像这样:

{
    "LPEONASVVAP0": {
        "LPEONASVVAP0": {
            "id": "urn:vcloud:vm:f526d27d-e0f9-4d4f-ae81-4824e397c027",
            "name": "LPEONASVVAP0",
            "description": "_vm_desc_",
            "dateCreated": "2021-04-06T14:56:09.640+0000"
        }
    },
    "WDEONDSVDIS6": {
        "WDEONDSVDIS6": {
            "id": "urn:vcloud:vm:7ed43492-a7ce-4963-b5bb-5ec2ca89477c",
            "name": "WDEONDSVDIS6",
            "description": "",
            "dateCreated": "2021-04-13T13:44:29.973+0000"
        }
    },
    "WDEONASVSTR0": {
        "WDEONASVSTR0": {
            "id": "urn:vcloud:vm:7afa34fe-b239-4abe-90df-3f270b44db1f",
            "name": "WDEONASVSTR0",
            "description": "",
            "dateCreated": "2021-03-10T16:17:50.947+0000"
        }
    },
}

我只需要提取字段 id、name 和 description 来用它们创建一个 csv。我对此进行了测试,但输出文件为空白:

$pathToJsonFile = x
$pathToOutputFile = x

$obj = Get-Content $pathToJsonFile -Raw | ConvertFrom-Json
print $obj
$obj | select id, name, description | Convertto-csv > $pathToOutputFile

【问题讨论】:

    标签: json powershell csv format


    【解决方案1】:

    您需要通过psobject 隐藏成员集“发现”父属性名称(例如'LPEONASVVAP0')。由于外部和内部属性命名相同,我们可以重用名称来获取内部属性值:

    $obj.psobject.Properties |ForEach-Object {
      $_.Value.$($_.Name)
    } |Select id,name,description |Export-Csv -NoTypeInformation -Path $pathToOutputFile
    

    【讨论】:

      【解决方案2】:

      编辑:Mathias R. Jessens 的回答比这写得更好,我会这样做,而不是我发布的方式。

      好的,所以我复制了您发布的 json,将其导入。由于每个信息数组都是这样存储的

      "WDEONDSVDIS6": {
      
         "WDEONDSVDIS6": {
      

      我使用get-member 迭代每个数组,然后从中选择信息。 另外,您不需要使用Convertto-csv > $pathToOutputFile,而是使用export-csv 命令。 下面是我的代码,我将如何做到这一点,可能有更好的方法,但这可行:)

      $pathToOutputFile = x.csv
      $obj = Get-Content example.json -Raw| ConvertFrom-Json
      
      $obj2 = ($obj | Get-Member -MemberType noteproperty).Name
      $result = foreach($item in $obj2){
      
          $obj.$item.$item | select id,name,description
      }
      $result | Export-Csv -Path $pathToOutputFile -Encoding utf8 -NoTypeInformation
      
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-12-10
        • 1970-01-01
        • 1970-01-01
        • 2019-03-03
        • 2022-01-16
        • 2019-11-19
        • 1970-01-01
        • 2018-03-18
        相关资源
        最近更新 更多