ORACLE SQL,DeserializeJSON

时间:2016-09-12 20:12:45

标签: sql json deserialization

我有一个序列化的JSON对象,如下所示:

{
"Sender": "Service",
"Type": "SPIGlassAuditedOrder",
"Data": "{\"Header\":{\"Id\":\"ASDFDSA-8687689-ASDFD\",\"EventType\":\"Order\"}"
}

在“数据”路径中,我想反序列化该路径。但是,我无法通过一个,所有附加的“\”和第二个,数据前的附加引号集 - >标题路径。

我使用了以下具有JSON_TABLE函数的SQL语句:

with tmp as (
  select jt1.*
  FROM schema.table t,
    JSON_TABLE(t.payload, '$'
    COLUMNS
      sender PATH '$.Sender',
      type PATH '$.Type',
      data PATH '$.Data') jt1
    where t.queue_config_fk = 37
) select * from tmp;

但数据返回Null:

enter image description here

我希望返回的是一个实际反序列化的JSON对象。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

JSON_TABLE从JSON创建虚拟表。尝试使用JSON_QUERY选择一个或多个值。

答案 1 :(得分:0)

您还可以在JSON_TABLE中使用JSON_QUERY语义,如下所示

with tmp as ( 
select jt1.*
FROM schema.table t,
JSON_TABLE(t.payload, '$'
COLUMNS
  sender PATH '$.Sender',
  type PATH '$.Type',
  data VARCHAR2(1000) FORMAT JSON PATH '$.Data') jt1
where t.queue_config_fk = 37

)从tmp;

中选择*

请注意 VARCHAR2(1000)FORMAT JSON