当前位置: 首页 > 知识库问答 >
问题:

如何解析JSON Array以更新postgreSQL中的记录

俞学
2023-03-14

我有一个名为employee_Details列的表名称

 EMP_ID   NAME  VECH_NO  SALARY
   1       A      1234    100
   2       B      12345   200

我使用Java构建JSON数组。具有结构

{[“EMP\u ID”:1,“NAME”:Y,“VECH\u NO”:4587,“SALARY”:1500),“EMP\u ID”:3,“NAME”:Z,“VECH\u NO”:4007,“SALARY”:1800]}

我需要更新表上EMP\U ID存在的完整记录,否则将作为新记录插入。postgreSQL中有任何内置函数可以实现这一点。我指的是这个https://www.postgresql.org/docs/9.3/static/functions-json.html但没有得到解决方案

共有1个答案

丁沛
2023-03-14

首先,您的JSON格式不正确,我猜其目的是:

[
    {"EMP_ID":1,"NAME":"Y","VECH_NO":4587,"SALARY":1500},
    {"EMP_ID":3,"NAME":"Z","VECH_NO":4007,"SALARY":1800}
]

假设下表定义:

CREATE TEMP TABLE employee_details(
    "EMP_ID" integer primary key,
    "NAME" text,
    "VECH_NO" integer,
    "SALARY" numeric
);

和一个示例数据(只是为了显示更新):

INSERT INTO employee_details VALUES(1, 'X', 123, 123);

您可以首先使用json\u array\u elements将每个数组设为一行,然后使用json\u populate\u record将每个值作为原始表类型,如下所示:

SELECT r.*
FROM
    json_array_elements('[{"EMP_ID":1,"NAME":"Y","VECH_NO":4587,"SALARY":1500},{"EMP_ID":3,"NAME":"Z","VECH_NO":4007,"SALARY":1800}]') AS a(element),
    json_populate_record(NULL::employee_details, a.element) AS r;

这样,您就可以简单地使用插入。。。冲突更新时:

INSERT INTO employee_details("EMP_ID", "NAME", "VECH_NO", "SALARY")
(
    SELECT r."EMP_ID", r."NAME", r."VECH_NO", r."SALARY"
    FROM
        json_array_elements('[{"EMP_ID":1,"NAME":"Y","VECH_NO":4587,"SALARY":1500},{"EMP_ID":3,"NAME":"Z","VECH_NO":4007,"SALARY":1800}]') AS a(element),
        json_populate_record(NULL::employee_details, a.element) AS r
)
ON CONFLICT ("EMP_ID") DO
UPDATE SET
    "NAME" = EXCLUDED."NAME",
    "VECH_NO" = EXCLUDED."VECH_NO",
    "SALARY" = EXCLUDED."SALARY"
;

关于冲突的条款仅适用于9.5或更高版本。在此之前,您必须对循环和重试或可写公共表表达式使用一些技巧(尽管这有竞争条件问题);无论如何,如果您使用的是旧版本,那么这是升级的一个很好的理由。

 类似资料:
  • 问题内容: 我想读这行,但是因为它以我开始有些困惑 我只需要使用“名称”并将所有另存为一个字符串。(字符串值将是:Jeff Bridges,Charles Grodin,Jessica Lange,John Randolph,Rene Auberjonois)。 这是我的代码: 问题答案: 如果您使用的是“名称”,为什么您的代码片段看起来像是试图获取“字符”的尝试? 无论如何,这与任何其他类似于列

  • 问题内容: 我有一个非常大的JSON文件,格式如下: 它看起来像一个JSONArray。所有记录都写在同一行中。 您能帮我如何使用Java解析此文件。我想读取每个JSON对象并显示所有全名和ID。以下是我的尝试,但是我的代码无法正常工作: 问题答案: 好的,伙计们……解决了我的问题。我正在发布解决方案,以防有人再次遇到相同的问题,可以使用我的解决方案。我的解决方案部分是由Rahul Rabhadi

  • 问题内容: 我正在尝试读取这样的JSON文件: 这是一项学校运动。我选择尝试使用JSON.simple(来自GoogleCode),但是我对另一个JSON库开放。我听说过杰克逊和格森:它们比JSON.simple好吗? 这是我当前的Java代码: 我检查了很多示例(有些在Stack上!),但是我从未找到解决问题的方法。 也许我们无法使用JSON.simple做到这一点?您有什么推荐的吗? 问题答案

  • 现在我用mybatis更新PostgreSQL 13记录,我想用user id更新用户表中的apple purchase prouct id,这是我的代码: 我给出了用户实体id和产品id,通过使用用户id更新产品id。这是使用mybatis的更新执行代码: 但是mybatis遗传sql会导致这样的错误: 我该怎么做才能修好它?

  • 问题内容: 正在运行。 下面给出的是我 巨大和丑陋 的样本 __ 我需要创建一个最终 结果 。 在执行上述操作时,出现以下错误。 我知道在做坏事。 希望您能从上述 查询中 了解要实现的目标。 因此,请提出其他替代方法。 非常感谢您的答复。 注意:实际查询 问题答案: 你不能那样做。 一个可以不引用PostgreSQL中CTE来看,由于热膨胀系数被物化。它们不仅是基础数据的视图。(有时确实很烦人,但

  • 这里是我的数组 该数组来自schedule.php 任何人都可以帮助我使用JSON调用公共列表getTestData()中的数组? 我试着和 但什么也没发生