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

PostgreSQL JSONB中如何将单个contact对象转换为guardian数组?

将单个contact对象转换为guardian数组的实现方案

需求说明

原JSONB数据结构(单个联系人):

{
   "studentId":"123",
   "contact":{
      "name":"parent1",
      "address":"address1"
   }
}

目标结构(多联系人数组):

{
   "studentId":"123",
   "guardian":[
      {
         "name":"parent1",
         "address":"address1"
      },
      {
         "name":"parent2",
         "address":"address2"
      }
   ]
}

1. PostgreSQL 中直接处理 JSONB 数据

如果是在PostgreSQL数据库中批量转换现有数据,可利用JSONB相关函数完成字段重构:

单条数据更新

UPDATE your_table_name
SET data = jsonb_set(
    data - 'contact',  -- 移除原contact字段
    '{guardian}',      -- 目标数组字段的路径
    jsonb_build_array(data->'contact')  -- 将原contact对象包装为数组
)
WHERE data->>'studentId' = '123';  -- 指定要更新的学生ID

批量更新所有符合条件的记录

如果要统一转换所有包含contact字段的记录:

UPDATE your_table_name
SET data = jsonb_set(
    data - 'contact',
    '{guardian}',
    jsonb_build_array(data->'contact')
)
WHERE data ? 'contact';  -- 仅更新存在contact字段的记录

2. 编程语言层面处理(以JavaScript为例)

如果是在业务代码中处理JSON对象,直接解构重构即可:

基础转换逻辑

// 原始学生数据
const originalStudent = {
  studentId: "123",
  contact: {
    name: "parent1",
    address: "address1"
  }
};

// 转换为目标结构
const transformedStudent = {
  studentId: originalStudent.studentId,
  guardian: [originalStudent.contact]  // 将单个contact转为数组
};

// 后续添加新联系人
transformedStudent.guardian.push({
  name: "parent2",
  address: "address2"
});

兼容无contact字段的场景

如果存在部分记录没有contact字段,可做兼容处理:

const transformedStudent = {
  studentId: originalStudent.studentId,
  guardian: originalStudent.contact ? [originalStudent.contact] : []
};

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 13:35:07