Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Powershell将JSON输出解析为CSV文件_Powershell - Fatal编程技术网

使用Powershell将JSON输出解析为CSV文件

使用Powershell将JSON输出解析为CSV文件,powershell,Powershell,我正在使用PowerShell通过API提取数据,并希望将JSON解析为CSV文件。如何将每个JSON结果解析为CSV结构,如下所示: $Date, $app, $pagename, $range1, $range1_value $Date, $app, $pagename, $range2, $range2_value $Date, $app, $pagename, $range3, $range3_value { "fields": [ {

我正在使用PowerShell通过API提取数据,并希望将JSON解析为CSV文件。如何将每个JSON结果解析为CSV结构,如下所示:

$Date, $app, $pagename, $range1, $range1_value
$Date, $app, $pagename, $range2, $range2_value
$Date, $app, $pagename, $range3, $range3_value
{
"fields":  [
               {
                   "label":  "app",
                   "field":  "app",
                   "type":  "string"
               },
               {
                   "label":  "pagename",
                   "field":  "pagename",
                   "type":  "string"
               },
               {
                   "label":  "range1",
                   "field":  "count(*)",
                   "type":  "integer",
                   "aggregation":  "filter"
               },
               {
                   "label":  "range2",
                   "field":  "count(*)",
                   "type":  "integer",
                   "aggregation":  "filter"
               },
               {
                   "label":  "range3",
                   "field":  "count(*)",
                   "type":  "integer",
                   "aggregation":  "filter"
               }
           ],
"results":  [
                [
                    "application1",
                    "loginpage",
                    41425,
                    41266,
                    18869
                ],
                [
                    "application2",
                    "loginpage",
                    7424,
                    7113,
                    2905
                ]
            ],
"moreData":  false,
"schema":  "record"
}
JSON如下所示:

$Date, $app, $pagename, $range1, $range1_value
$Date, $app, $pagename, $range2, $range2_value
$Date, $app, $pagename, $range3, $range3_value
{
"fields":  [
               {
                   "label":  "app",
                   "field":  "app",
                   "type":  "string"
               },
               {
                   "label":  "pagename",
                   "field":  "pagename",
                   "type":  "string"
               },
               {
                   "label":  "range1",
                   "field":  "count(*)",
                   "type":  "integer",
                   "aggregation":  "filter"
               },
               {
                   "label":  "range2",
                   "field":  "count(*)",
                   "type":  "integer",
                   "aggregation":  "filter"
               },
               {
                   "label":  "range3",
                   "field":  "count(*)",
                   "type":  "integer",
                   "aggregation":  "filter"
               }
           ],
"results":  [
                [
                    "application1",
                    "loginpage",
                    41425,
                    41266,
                    18869
                ],
                [
                    "application2",
                    "loginpage",
                    7424,
                    7113,
                    2905
                ]
            ],
"moreData":  false,
"schema":  "record"
}

我尝试过各种方法(例如
convertToJSON
Convertfrom JSON
),但我似乎无法将“字段”和“结果”连接到一个哈希表中。我希望我可以将它创建为一个
$JSON
对象,然后像
$JSON[0..1]
那样迭代每个结果让我们从解析输入数据开始

使用
for
循环迭代
结果
值中的单个数组项,然后使用索引解析
字段
列表中的类型和标签名称:

# Convert from json
$data = $jsonString |ConvertFrom-Json

# Set up a type table for easy conversion
$typeTable = @{'integer' = [int]}

# Iterate over each row in the results
$results = foreach($values in $data.results){

  # Create dictionary to hold property values for the row
  $Properties = [ordered]@{}
  for($index = 0; $index -lt $data.fields.Count; $index++){
    # Resolve field metadata by index
    $field = $data.fields[$index]

    # Take type mappings into account and write to $Properties dictionary
    if($typeTable.ContainsKey($field.type)){
      $Properties[$field.label] = $values[$index] -as $typeTable[$field.type]
    }
    else{
      $Properties[$field.label] = $values[$index]
    }
  }

  # Output structured object
  [PSCustomObject]$Properties
}
现在我们有了可以使用的好对象,我们可以使用
Select Object
Export Csv
创建所需的输出格式:

$results | Select Object@{Name='Date';Expression={Get Date-Format yyyyMMdd},app,pagename,@{Name='2000';Expression={'2000'},range3 | Export Csv-Path.\Path\to\output.Csv-NoTypeInformation

太好了,非常感谢@Mathias R.Jessen。我只是注意到我没有准确地格式化输出格式。如何列出每一个的“范围名称”和“范围值”?我已经在我的OP中更新了这个例子。