You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

代码说明

  1. 清理数据:移除SQL结果自带的ItemArray、Table等无用属性,只保留业务字段。
  2. 分组逻辑:通过Group-Object按主字段聚合,确保同一主记录下的所有position条目被归为一组。
  3. 构造结构:对每组先提取主字段,再将每条记录的position字段映射为目标格式的对象,组成positions数组后合并到主记录。
  4. JSON序列化:使用-Depth 10避免嵌套结构被截断(可根据实际嵌套深度调整数值)。

内容的提问来源于stack exchange,提问作者M.Bennani

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 11:45:12