尝试使用Mark Wrang的答案对我无效。虽然Piemol在2019年1月30日的评论解决了Mark Wrang答案中的一个基本问题,但它对我也不起作用。
JSON字符串并不总是表示矩形数据集。它们可能包含不规则的数据。例如,Power BI活动日志输出包含不同的成员,取决于变量,如请求数据中发生的活动或当时可用的功能。
使用Piemol的评论,我处理了这个JSON:
[
{
"a": "Value 1",
"b": 20,
"g": "Arizona"
},
{
"a": "Value 2",
"b": 40,
"c": "2022-01-01T11:00:00Z"
},
{
"a": "Value 3",
"d": "omicron",
"c": "2022-01-01T12:00:00Z"
},
{
"a": "Value 4",
"b": 60,
"d": "delta",
"e": 14,
"c": "2022-01-01T13:00:00Z"
}
]
这个脚本生成了这个CSV文件:
"a","b","g"
"Value 1","20","Arizona"
"Value 2","40",
"Value 3",,
"Value 4","60",
请注意,缺少列c,d和e。看起来Export-CSV使用第一个传递的对象来确定要输出的CSV的模式。
为了处理这个问题,请使用
UnifyProperties函数:
function UnifyProperties {
$Names = [System.Collections.Generic.HashSet[string]]::new([StringComparer]::OrdinalIgnoreCase)
$InputCollected = @($Input)
$InputCollected.ForEach({
foreach ($Name in $_.psobject.Properties.Name) { $Null = $Names.Add($Name) }
})
$inputCollected | Select-Object @($Names)
}
$pathToInputFolder = (New-Object -ComObject Shell.Application).NameSpace('shell:Downloads').Self.Path + "\" + "PowerBIActivities\combined\"
$pathToInputFile = $pathToInputFolder + "Activities.json"
$pathToOutputFile = $pathToInputFolder + "Activities.csv"
$content = Get-Content -Path $pathToInputFile -Raw
$psObj = ConvertFrom-Json -InputObject $content
$psObj | UnifyProperties | Export-CSV $pathToOutputFile -NoTypeInformation
((Get-Content -Path $pathToJsonFile -Raw) | ConvertFrom-Json) | Export-CSV $pathToOutputFile -NoTypeInformation
。如果版本有影响,那是PowerShell 4版本。 - Piemol.results
。 - MDMoore313