我已经搜索了许多例子,试图使用Powershell将复杂的JSON(嵌套数组)转换为CSV文件。目标是将JSON数据导入MSAccess数据库。MSAccess没有提供内在函数来完成此操作。我对Powershell和JSON都不熟悉,但我发现了ConvertFrom-JSON cmdlet,这引起了我的兴趣。我找到的最好的信息是由iRon编写的Flatten-Object函数,它是针对以下文章的回应:
PowerShell convert nested JSON array into separate columns in CSV file
虽然该函数可以创建单个csv文件,但如果json中有嵌套的数组,我希望创建多个csv文件。想法是为每个级别的数据创建一个csv文件。第二级及以下需要使用链接字段(id/name)作为级别1中的主键,并作为级别2中的外键。在级别2处的PK字段将作为外键包含在级别3中,以此类推。由于Access可以将csv数据导入表格,因此将数据转换为“规范化”的csv文件可能是将json数据导入MSAccess数据库的可重复方法。
因此,关于我的目标和Flatten-Object函数,我正在寻求以下方面的建议/指导:
预期输出:3个csv文件。 1)Squad.csv,字段为“squadName”,“homeTown”,“formed”,“secretBase”,“active”。 2)SquadMembers.csv,字段为“squadName”,“name”,“age”,“secretIdentity”。 3)SquadMemberPowers.csv,字段为“Name”,“powers”。
因此,关于我的目标和Flatten-Object函数,我正在寻求以下方面的建议/指导:
- 是否可以调整/使用该函数来识别json文件中的级别,
- 为每个级别创建一个csv,并选择一个PK字段以规范化地关联csv数据文件以导入MSAccess??
<#CarsBasic.ps1
.DESCRIPTION
This script takes the cars.json file and reads it into memory
Converts it from Json, then selects id,manufacturer,year from the result
and exports the data to C:\Programs\CarsJack.csv as a csv file with header
#>
(Get-Content C:\Programs\MendipDataSystems\JSONParser\Files\Cars.json -Raw |
ConvertFrom-Json) |Select id,manufacturer,year |
Export-CSV c:\programs\CarsJack.csv -NoTypeInformation
提前感谢。
根据iRon的要求/评论,我已调整此帖子。
这是一个包含Squad、SquadMember和SquadMemberPower等级的样本json文件。我想要得到一个包含Squad信息的Squad.csv文件,以及一个包含Squad名称和每个成员详细信息的SquadMember.csv文件,还有一个包含SquadName和成员姓名的SquadmemberPower.csv文件,以识别该能力属于哪个成员。实际上,这三个csv文件将被加载到MSAccess中作为三个规范化表。这是我的测试案例,但如果可能的话,我想要一个更通用、可重用的方法。这是MultiSquad.json文件。
[{
"squadName": "Super hero squad Alpha",
"homeTown": "Metro City",
"formed": 2016,
"secretBase": "Large tent in the forest",
"active": "True",
"members": [{
"name": "Molecule Man",
"age": 29,
"secretIdentity": "Dan Jukes",
"powers": ["Radiation resistance",
"Turning tiny",
"Radiation blast"]
},
{
"name": "Madame Uppercut",
"age": 39,
"secretIdentity": "Jane Wilson",
"powers": ["Million tonne punch",
"Damage resistance",
"Superhuman reflexes"]
},
{
"name": "Eternal Flame",
"age": 1000000,
"secretIdentity": "Unknown",
"powers": ["Immortality",
"Heat Immunity",
"Inferno",
"Teleportation",
"Interdimensional travel"]
}]
},
{
"squadName": "Second squad Baker",
"homeTown": "Metro Toronto",
"formed": 2017,
"secretBase": "CN tower",
"active": "True",
"members": [{
"name": "Kathleen Wynne",
"age": 49,
"secretIdentity": "Cyan Arrah",
"powers": ["XRay vision",
"Invisibility",
"Radiation blast"]
},
{
"name": "Madame Butterfly",
"age": 27,
"secretIdentity": "Iman Angel",
"powers": ["Magical hearing",
"Fantastic ideas"]
},
{
"name": "Gassy Misty Cloud",
"age": 1000,
"secretIdentity": "Puff of Smoke",
"powers": ["Immortality",
"Heat and Flame Immunity",
"Impeccable hearing",
"Xray Vision",
"Able to jump tall buildings",
"Teleportation",
"Intergalactic travel"]
}]
}]
预期输出:3个csv文件。 1)Squad.csv,字段为“squadName”,“homeTown”,“formed”,“secretBase”,“active”。 2)SquadMembers.csv,字段为“squadName”,“name”,“age”,“secretIdentity”。 3)SquadMemberPowers.csv,字段为“Name”,“powers”。