【问题标题】:escaping of double quote with text type column at postgresql and json parsing via jackson在postgresql中使用文本类型列转义双引号并通过jackson解析json
【发布时间】:2012-07-03 21:01:39
【问题描述】:


我在 postgresql 中定义了下表:

        Column      |          Type          | Modifiers 
-----------------+------------------------+-----------
 id              | uuid                   | not null
 entity_snapshot | text                   | 
Indexes:
    "pk_id" PRIMARY KEY, btree (id)

我想存储以下 JSon 字符串:

[ "org.test.MyUniqueId", {:   "uuid" : "f4b40050-9716-4346-bf84-8325fadd9876": } ]

对于一些测试,我没有使用 Jackson 来执行此操作,而是尝试手动键入 SQL,这是我的问题 - 我似乎无法正确理解。
我目前的尝试是:

insert into my_table(id,entity_snapshot) values ('d11d944e-6e78-11e1-aae1-52540015fc3f','[ \"org.test.MyUniqueId\", {:   \"uuid\" : \"f4b40050-9716-4346-bf84-8325fadd9876\": } ]');

当我从表中选择时,生成一个看起来像我需要的记录,但是当我尝试使用 Jackson 来解析它时,我得到一个错误 -

org.apache.commons.lang.SerializationException: org.codehaus.jackson.JsonParseException: Unexpected character (':' (code 58)): was expecting double-quote to start field name

不用说,如果通过我的 java 代码插入相同的记录,我可以解析它,当用人眼查看记录时,它对我来说看起来是一样的。
你能告诉我我的 SQL 插入语句哪里错了吗?

【问题讨论】:

  • 您可以使用 sqldump 将 Java 插入的两行和手动插入的行写入文本文件,并比较与手动插入的不同之处。

标签: java json postgresql jackson


【解决方案1】:

您可以使用美元引用的字符串常量。 详情在这里Postgres documentation

在你的情况下查询应该是这样的

insert into my_table(id,entity_snapshot) values ('d11d944e-6e78-11e1-aae1-52540015fc3f',$$[ "org.test.MyUniqueId", {:   "uuid" : "f4b40050-9716-4346-bf84-8325fadd9876": } ]$$);

【讨论】:

    【解决方案2】:

    单引号内的双引号不需要任何转义。

    insert into my_table (id,entity_snapshot)
    values 
    (
       'd11d944e-6e78-11e1-aae1-52540015fc3f',
       '["org.test.MyUniqueId", {: "uuid" : "f4b40050-9716-4346-bf84-8325fadd9876": }]'
    );
    

    会正常工作的:

    postgres=> 创建表 my_table (id uuid, entity_snapshot text); 创建表 时间:34,936 毫秒 postgres=> 插入 my_table (id,entity_snapshot) postgres-> 值 postgres-> ( postgres(> 'd11d944e-6e78-11e1-aae1-52540015fc3f', postgres(>'[“org.test.MyUniqueId”,{:“uuid”:“f4b40050-9716-4346-bf84-8325fadd9876”:}]' postgres(>); 插入 0 1 时间:18,255 毫秒 postgres=>

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-22
      • 1970-01-01
      • 1970-01-01
      • 2018-05-13
      • 2021-02-28
      • 2021-11-11
      • 1970-01-01
      相关资源
      最近更新 更多