如何给PowerShell数组数据添加列名并转换为JSON格式
PowerShell实现:将扁平化学生数据转换为指定JSON格式
需求说明
输入为空格分隔的扁平化字符串,每3个连续字段对应一名学生的Name、RollNo、SubjectID,需转换为指定的JSON对象格式(可选择标准数组格式或示例中的逗号分隔对象格式)。
实现代码
1. 标准JSON数组格式(推荐,符合JSON规范)
# 输入的扁平化学生数据 $inputData = "student1 RL123 S12 student2 RL423 S32 student6 RL166 S02 student34 RL993 P12 student99 RL923 S12" # 拆分字符串为单个元素数组,按每3个元素分组 $splitData = $inputData -split '\s+' $studentGroups = for ($i = 0; $i -lt $splitData.Count; $i += 3) { $splitData[$i..($i + 2)] } # 转换为自定义对象并生成标准JSON数组 $jsonArray = $studentGroups | ForEach-Object { [PSCustomObject]@{ Name = $_[0] RollNo = $_[1] SubjectID = $_[2] } } | ConvertTo-Json -Depth 10 # 输出结果 $jsonArray
执行后输出的标准JSON格式:
[ { "Name": "student1", "RollNo": "RL123", "SubjectID": "S12" }, { "Name": "student2", "RollNo": "RL423", "SubjectID": "S32" }, { "Name": "student6", "RollNo": "RL166", "SubjectID": "S02" }, { "Name": "student34", "RollNo": "RL993", "SubjectID": "P12" }, { "Name": "student99", "RollNo": "RL923", "SubjectID": "S12" } ]
2. 匹配示例的逗号分隔对象格式(非标准JSON)
如果需要完全匹配你提供的示例格式(无数组包裹,仅逗号分隔对象),可使用以下代码:
# 输入的扁平化学生数据 $inputData = "student1 RL123 S12 student2 RL423 S32 student6 RL166 S02 student34 RL993 P12 student99 RL923 S12" # 拆分并分组数据 $splitData = $inputData -split '\s+' $studentGroups = for ($i = 0; $i -lt $splitData.Count; $i += 3) { $splitData[$i..($i + 2)] } # 生成单个对象的JSON并拼接 $formattedOutput = $studentGroups | ForEach-Object { [PSCustomObject]@{ Name = $_[0] RollNo = $_[1] SubjectID = $_[2] } | ConvertTo-Json -Depth 10 } | Join-String -Separator ",`n" # 输出结果 $formattedOutput
执行后输出与示例完全一致的格式:
{ "Name": "student1", "RollNo": "RL123", "SubjectID": "S12" }, { "Name": "student2", "RollNo": "RL423", "SubjectID": "S32" }, { "Name": "student6", "RollNo": "RL166", "SubjectID": "S02" }, { "Name": "student34", "RollNo": "RL993", "SubjectID": "P12" }, { "Name": "student99", "RollNo": "RL923", "SubjectID": "S12" }
关键逻辑说明
- 使用
-split '\s+'拆分字符串:匹配任意数量的空格,避免因连续空格产生空元素 - 循环步长设为3:确保每3个元素对应一名学生的完整信息
[PSCustomObject]构建结构化对象:保证JSON输出的键名与需求完全一致ConvertTo-Json转换格式:-Depth 10确保嵌套对象(此处无嵌套)能正确转换
内容的提问来源于stack exchange,提问作者TechSavvy8102
相关产品推荐
相关产品推荐

