使用Powershell将JSON输出解析为CSV文件
我正在使用PowerShell通过API提取数据,并希望将JSON解析为CSV文件。如何将每个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": [ {
$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中更新了这个例子。