使用TypeORM将数据存储为JSON对象数组,而不仅仅是JSON对象存储在Postgres中

问题描述

我在NodeJS函数中使用TypeORM。我有Postgres数据库,其中表列 emp_data 的类型为JSON,而不是JSON []。但是数据是以对象数组的形式存储的,而不仅仅是对象本身。

这是我传递数据的逻辑:-

      let emp1 = [{
        "EmployeeID": "1391","FirstName": "Vinod","LastName": "Kumar",}];
      let emp2 = [{
        "EmployeeID": "0827","FirstName": "Vijay",}];

     const res = await dbConn
        .createQueryBuilder()
        .insert()
        .into(IntegrationData)
        .values(
          { empId: 1391,empData: emp1,integrationName: 'workday'},{ empId: 0827,empData: emp2,)
        .execute();

实体:-

import { Entity,PrimaryGeneratedColumn,Column,BaseEntity } from "typeorm";

@Entity({ name: "integration_data" })
export class IntegrationData extends BaseEntity {
  @PrimaryGeneratedColumn({ type: "bigint" })
  id: number;

  @Column({ type: "bigint",name: "emp_id" })
  empId: number;

  @Column({ type: "json",name: "emp_data" })
  empData: any;

  @Column({ name: "integration_name" })
  integrationName: string;
}

请参阅随附的屏幕截图。数据作为对象数组存储在 emp_data 列中。

enter image description here

我知道我将emp1和emp2作为对象数组传递,但是问题是,如果将emp1或emp2转换为对象,则会出现兼容的问题错误(请参阅随附的屏幕截图)。

enter image description here

请帮助我将数据存储为JSON对象而不是JSON对象数组。谢谢

解决方法

您只需将 empData 的类型注释设置为 unknown

或者...

您可以将 empData 属性设置为 string 并使用 JSON.stringify 直接保存 JSON。

let emp1 = {
  "EmployeeID": "1391","FirstName": "Vinod","LastName": "Kumar",};

// ...

const insert = db.CreateQueryBuilder() 
  // ...
  .values({ empDate: JSON.stringify(emp1) })
  // ...

或者……

如果您知道对象形状不会经常改变,您可以创建一个接口来进行正确的类型检查。

interface EmployeeData {
  EmployeeID: string;
  FirstName: string;
  LastName: string;
}

export class IntegrationData extends BaseEntity {
  // ...

  /* 
    Interfaces doesn't exists in runtime,so object shape isn't guaranteed.
  */
  @Column({ type: "json",name: "emp_data" })
  empData: EmployeeData;

  // ...
}

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...