如何解决使用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 列中。
我知道我将emp1和emp2作为对象数组传递,但是问题是,如果将emp1或emp2转换为对象,则会出现兼容的问题错误(请参阅随附的屏幕截图)。
请帮助我将数据存储为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;
// ...
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。