Как разделить Json с помощью Oracle 19

у меня вопрос:¿есть способ вынуть часть json? просто «общий» объект и внутри этого объекта не берут «зону», а также «центральную».

У меня следующая таблица:

         CREATE TABLE FB_TAB 
      ( COL CLOB COLLATE USING_NLS_COMP, 
    ID NUMBER, 
    TYPE VARCHAR2(20 BYTE) COLLATE USING_NLS_COMP, 
    COLOR VARCHAR2(20 BYTE) COLLATE USING_NLS_COMP, 
    AMOUNT NUMBER, 
    APP VARCHAR2(20 BYTE) COLLATE USING_NLS_COMP, 
     CONSTRAINT JSON_CON_1 CHECK (col IS JSON) ENABLE
      )

и вставьте:

      insert into fb_tab 
values('
{"common":{"contrato":{"id":"1","codigo":"054AKSDJ","nombre":"BUCLE"},"servicio":"","actividad":"Apertura","tipo_actividad":"BAJA","numero_administrativo":"","estado_origen":"Pendiente","provincia":{"id":"24","nombre":"León"},"aplicacion_origen":{"id":"1","nombre":"VISORD"},"zona":{"pais":"ES","cliente":"TL","div_geo":"2410002"},"central":{"codigo":"2410002","nombre":"Leon-Torre"},"clave":{"act_domiciliaria":"","prioridad":""}},"app_log":{"app_name":"client_mobile"}}
', 23, 'Ball', 'Red', 15, 'Mobile');
commit;

Я хочу получить в результате следующий JSON:

      {"Type":"Ball","Color":"Red","App":"Mobile","Amount":"15","my_json":{"contrato":{"id":"1","codigo":"054AKSDJ","nombre":"BUCLE"},"servicio":"","actividad":"Apertura","tipo_actividad":"BAJA","numero_administrativo":"","estado_origen":"Pendiente","provincia":{"id":"24","nombre":"León"},"aplicacion_origen":{"id":"1","nombre":"VISORD"},"clave":{"act_domiciliaria":"","prioridad":""}}}

Я пытаюсь выполнить этот запрос:

      SELECT JSON_OBJECT (
    'Type' value to_char(a.Type),
    'Color' value to_char(a.Color),
    'App' value to_char(a.App),
    'Amount' value to_char(a.Amount),
    'my_json' VALUE treat ( JSON_QUERY(a.col, '$.common' WITHOUT WRAPPER) as json )
)
--into json_output
FROM FB_TAB a
where a.id = :id;

но мой фактический результат таков:

      {"Type":"Ball","Color":"Red","App":"Mobile","Amount":"15","my_json":{"contrato":{"id":"1","codigo":"054AKSDJ","nombre":"BUCLE"},"servicio":"","actividad":"Apertura","tipo_actividad":"BAJA","numero_administrativo":"","estado_origen":"Pendiente","provincia":{"id":"24","nombre":"León"},"aplicacion_origen":{"id":"1","nombre":"VISORD"},"zona":{"pais":"ES","cliente":"TL","div_geo":"2410002"},"central":{"codigo":"2410002","nombre":"Leon-Torre"},"clave":{"act_domiciliaria":"","prioridad":""}}}

Я не хочу видеть «зону» и «центральную»

есть способ сделать это?

С наилучшими пожеланиями

1 ответ

У вас есть ошибка внутри JSON, который вы пытаетесь вставить в таблицу

Вот исправленный оператор вставки

Я разбил его на части, пытаясь исправить, не стесняйтесь "развернуть" его в одну строку

      insert into fb_tab 
values('
{"common":
    {"contrato":{"id":"1","codigo":"054AKSDJ","nombre":"BUCLE"},
     "servicio":"",
     "actividad":"Apertura",
     "tipo_actividad":"BAJA",
     "numero_administrativo":"",
     "estado_origen":"Pendiente",
     "provincia":{"id":"24","nombre":"León"},
     "aplicacion_origen":{"id":"1","nombre":"VISORD"},
     "clave":{"act_domiciliaria":"","prioridad":""}
    },
 "zona":{"pais":"ES","cliente":"TL","div_geo":"2410002"},
 "central":{"codigo":"2410002","nombre":"Leon-Torre"},
 "app_log":{"app_name":"client_mobile"}
}',
23, 'Ball', 'Red', 15, 'Mobile');

В основном вы размещали clave после и закрывая его двумя фигурными скобками ( }) делая common включать zona а также central, который вы пытались исключить из результата запроса.

Теперь, когда вы запрашиваете таблицу

      SELECT JSON_OBJECT (
    'Type' value to_char(a.Type),
    'Color' value to_char(a.Color),
    'App' value to_char(a.App),
    'Amount' value to_char(a.Amount)
    ,'my_json' VALUE treat ( JSON_QUERY(a.col, '$.common' WITHOUT WRAPPER) as json )
)
FROM FB_TAB a
where a.id = 23;

Удалено :id привязать, чтобы упростить процесс отладки

Вы получаете желаемый результат

      {"Type":"Ball","Color":"Red","App":"Mobile","Amount":"15","my_json":{"contrato":{"id":"1","codigo":"054AKSDJ","nombre":"BUCLE"},"servicio":"","actividad":"Apertura","tipo_actividad":"BAJA","numero_administrativo":"","estado_origen":"Pendiente","provincia":{"id":"24","nombre":"León"},"aplicacion_origen":{"id":"1","nombre":"VISORD"},"clave":{"act_domiciliaria":"","prioridad":""}}}
Другие вопросы по тегам