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

如何将Redshift Data API的GetStatementResultOutput转为JSON或结构体?

处理Redshift Data API返回的Field数组

方案一:让Redshift直接返回JSON结果

你可以通过Redshift的SQL函数直接将查询结果转换为JSON格式,拿到的结果就是结构化的JSON字符串,无需在Go端处理复杂的Field数组。常用的函数有ROW_TO_JSON(单条记录转JSON)和JSON_AGG(多条记录转JSON数组)。

示例SQL:

-- 将查询结果转为JSON数组
SELECT JSON_AGG(ROW_TO_JSON(t)) AS result
FROM (
    SELECT id, name, email 
    FROM your_table 
    WHERE status = 'active'
) t;

执行这个查询后,Redshift Data API返回的Records数组中会包含一个字段,其Value就是完整的JSON数组字符串。你可以直接在Go代码中将这个字符串解析为JSON对象或结构体数组:

// 假设output是ExecuteStatement的返回结果
jsonStr := output.Records[0][0].Value.(string)
var results []map[string]interface{}
if err := json.Unmarshal([]byte(jsonStr), &results); err != nil {
    // 处理解析错误
}

方案二:在Go代码中转换Field数组为结构体或JSON

如果需要保留原始查询方式,可手动解析Records中的二维Field数组,将其映射为Go结构体或JSON对象。

步骤说明

  1. 从ColumnMetadata中提取列名,对应每行Field的顺序;
  2. 遍历每行记录,将每个Field的值映射到对应列名,生成键值对;
  3. 将键值对转换为JSON或直接赋值到目标结构体。

代码示例

首先定义目标结构体(以用户表为例):

type User struct {
    ID    int64  `json:"id"`
    Name  string `json:"name"`
    Email string `json:"email"`
}

然后解析Records数组:

// 获取列名列表
var columnNames []string
for _, col := range output.ColumnMetadata {
    columnNames = append(columnNames, *col.Name)
}

// 转换为结构体数组
var users []User
for _, row := range output.Records {
    user := User{}
    for i, field := range row {
        // 处理NULL值
        if field.IsNull != nil && *field.IsNull {
            continue
        }
        // 根据列名映射到结构体字段
        switch columnNames[i] {
        case "id":
            user.ID = field.Value.(int64)
        case "name":
            user.Name = field.Value.(string)
        case "email":
            user.Email = field.Value.(string)
        }
    }
    users = append(users, user)
}

// 转换为JSON(如果需要)
jsonData, err := json.Marshal(users)
if err != nil {
    // 处理JSON序列化错误
}

注意事项

  • Redshift返回的数值类型通常对应Go的int64或float64,字符串类型直接对应string;
  • 对于Decimal等高精度类型,建议在SQL中转换为字符串后再处理,避免精度丢失;
  • 务必处理IsNull标记,避免空指针或类型断言错误。

内容的提问来源于stack exchange,提问作者Michael Bonnet

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 17:27:26