You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用PowerShell转换嵌套JSON为CSV时生成空文件的问题

PowerShell转换嵌套JSON到CSV生成空文件的解决方法

尝试用PowerShell将嵌套JSON转换为CSV时生成了空文件,以下是示例JSON和使用的脚本:

示例JSON:

{
  "reports": [
    {
      "columnHeader": {
        "dimensions": [
          "ga:socialNetwork"
        ],
        "metricHeader": {
          "metricHeaderEntries": [
            {
              "name": "ga:pageviews",
              "type": "INTEGER"
            }
          ]
        }
      },
      "data": {
        "rows": [
          {
            "dimensions": [
              "(not set)"
            ],
            "metrics": [
              {
                "values": [
                  "433"
                ]
              }
            ]
          }
        ],
        "totals": [
          {
            "values": [
              "433"
            ]
          }
        ],
        "rowCount": 1,
        "minimums": [
          {
            "values": [
              "433"
            ]
          }
        ],
        "maximums": [
          {
            "values": [
              "433"
            ]
          }
        ],
        "isDataGolden": true
      }
    }
  ]
}

使用的PowerShell脚本:

((Get-Content -Path "Z:\Informatica\IICS\ProjectFolders\Dev\Government\Google_Analytics\Files\GA_PageViews_City_2023-07-05.json" -Raw) | ConvertFrom-Json ).results | ConvertTo-Csv -NoTypeInformation | Set-Content Z:\Informatica\IICS\ProjectFolders\Dev\Government\Google_Analytics\Files\GA_PageViews_City_2023-07-05.csv

问题分析与修正

  1. 顶级键名错误:脚本中使用了.results,但JSON的顶级数组键是reports,这是导致空文件的直接原因——找不到对应的数据节点。
  2. 嵌套结构未解析:JSON中的实际数据嵌套在reports[0].data.rows里,直接转换reports无法提取出结构化的表格数据,需要手动解析维度和指标的对应关系。

正确脚本

# 读取并转换JSON数据
$jsonData = Get-Content -Path "Z:\Informatica\IICS\ProjectFolders\Dev\Government\Google_Analytics\Files\GA_PageViews_City_2023-07-05.json" -Raw | ConvertFrom-Json
$report = $jsonData.reports[0]

# 提取表头:维度名 + 指标名
$headers = $report.columnHeader.dimensions + $report.columnHeader.metricHeader.metricHeaderEntries.name

# 解析每行数据,组合维度和指标值
$rows = $report.data.rows | ForEach-Object {
    $rowData = [ordered]@{}
    # 添加维度值
    for ($i=0; $i -lt $_.dimensions.Count; $i++) {
        $rowData[$headers[$i]] = $_.dimensions[$i]
    }
    # 添加指标值
    for ($i=0; $i -lt $_.metrics[0].values.Count; $i++) {
        $rowData[$headers[$i + $_.dimensions.Count]] = $_.metrics[0].values[$i]
    }
    [PSCustomObject]$rowData
}

# 转换为CSV并保存
$rows | ConvertTo-Csv -NoTypeInformation | Set-Content "Z:\Informatica\IICS\ProjectFolders\Dev\Government\Google_Analytics\Files\GA_PageViews_City_2023-07-05.csv" -Encoding UTF8

脚本说明

  • 先获取JSON中的第一个报告(reports[0]),因为reports是数组结构。
  • 从columnHeader中提取维度和指标的名称作为CSV表头。
  • 遍历data.rows,将每个行的维度值和指标值对应到表头,生成结构化的自定义对象。
  • 最后将对象集合转换为CSV并保存,指定UTF8编码避免乱码问题。

内容的提问来源于stack exchange,提问作者pavan kumar kasaraneni

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 05:37:16