2016-09-12 1 views
0

У меня есть упорядоченный объект JSON следующим образом:ORACLE SQL, DeserializeJSON

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

В пути "Data", я десериализации по этому пути. Однако я не могу пройти мимо одного, все дополнительные «\» и, во-вторых, дополнительный набор кавычек перед трактом Data -> Header.

Я использовал следующее заявление SQL, который имеет JSON_TABLE функции:

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 ,

Любая помощь была бы принята с благодарностью.

ответ

0

JSON_TABLE создает виртуальную таблицу из JSON. Попробуйте использовать JSON_QUERY, чтобы выбрать одно или несколько значений.

0

вы также можете использовать JSON_QUERY семантику в JSON_TABLE следующим

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) Формат JSON