【问题标题】:facing 'malformed array literal' when trying to insert json in postgres尝试在 postgres 中插入 json 时面临“格式错误的数组文字”
【发布时间】:2018-12-11 06:45:57
【问题描述】:

我正在尝试使用 psycopg2 将我的 python 代码中的 json 对象传递给 postgres 存储过程:

{
  "experience": null,
  "phoneNumber": [
    "091184xxx"
  ],
  "location": "tehran"
}

但出现此错误:

错误:格式错误的数组文字:“phoneNumbers”详细信息:数组值 必须以“{”或维度信息开头。

我该如何解决这个错误?

更新: 这是我的存储过程:

CREATE OR REPLACE FUNCTION data(job_req JSONB)
  RETURNS VOID
AS $$
DECLARE

INSERT INTO "JobRequirements" (expertise,"phoneNumbers", "location")
  VALUES (
    job_req ->> 'expertise',
    job_req ->> 'phoneNumbers' :: VARCHAR [],
    job_req ->> 'location'
  );
END;
$$ LANGUAGE 'plpgsql';

“phoneNumbers”列的类型是varchar(255) []

【问题讨论】:

  • 向我们展示从过程中运行的插入查询以及要插入的表的定义。
  • 我已将它们添加到问题中
  • I think you need to do sth. like this。如果是这样,是的,它很蹩脚......

标签: postgresql stored-procedures psycopg2


【解决方案1】:

在插入之前,您必须将 JSON 数组元素提取为文本并将其转换为 VARCHAR 数组。

CREATE OR REPLACE FUNCTION data(job_req JSONB)
  RETURNS VOID
AS $$
BEGIN
INSERT INTO "JobRequirements" (expertise,"phoneNumbers", "location")
  SELECT 
    job_req ->> 'expertise' ,
     array_agg(d.phonenumber::VARCHAR ) ,
    job_req ->> 'location' 
    FROM jsonb_array_elements_text(job_req->'phoneNumbers') as d(phonenumber);
END;
$$ LANGUAGE plpgsql;

Demo

【讨论】:

    猜你喜欢
    • 2020-11-08
    • 2021-12-02
    • 2016-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-29
    相关资源
    最近更新 更多