PowerShell实现SQL查询结果按指定结构分组转换为JSON
解决PowerShell SQL结果转指定JSON结构的问题
核心思路
先清理SQL查询结果中的无用属性,再按date、indicatorGroupNames、globalValuation这些共同字段分组,最后将每组内的position相关字段整理为数组,和主字段合并后转JSON。
完整代码
# 清理SQL结果中的冗余属性 $cleanedRecords = $QueryResult_uce | Select-Object * -ExcludeProperty ItemArray, Table, RowError, RowState, HasErrors # 按主字段分组(确保每组对应一个包含多个positions的主记录) $groupedRecords = $cleanedRecords | Group-Object date, indicatorGroupNames, globalValuation # 构造目标JSON结构 $finalResult = $groupedRecords | ForEach-Object { # 提取组内的主字段值(取第一条记录即可,因为分组依据就是这些字段) $mainRecord = $_.Group[0] | Select-Object date, indicatorGroupNames, globalValuation # 整理当前组内的所有position条目 $positionList = $_.Group | ForEach-Object { [PSCustomObject]@{ portfolioCode = $_.positions_portfolioCode positionId = $_.positions_positionID instrumentId = $_.positions_instrumentId weight = $_.positions_weight } } # 将positions数组添加到主记录中 $mainRecord | Add-Member -MemberType NoteProperty -Name positions -Value $positionList -PassThru } # 转换为JSON(-Depth参数确保嵌套结构被完整序列化) $finalResult | ConvertTo-Json -Depth 10
代码说明
- 清理数据:移除SQL结果自带的
ItemArray、Table等无用属性,只保留业务字段。 - 分组逻辑:通过
Group-Object按主字段聚合,确保同一主记录下的所有position条目被归为一组。 - 构造结构:对每组先提取主字段,再将每条记录的position字段映射为目标格式的对象,组成
positions数组后合并到主记录。 - JSON序列化:使用
-Depth 10避免嵌套结构被截断(可根据实际嵌套深度调整数值)。
内容的提问来源于stack exchange,提问作者M.Bennani
相关产品推荐
相关产品推荐

