Проблема, когда Oracle SQL обрабатывает JSON с одинаковыми именами записей - PullRequest
0 голосов
/ 06 декабря 2018

Я пытаюсь получить некоторые данные из файла JSON и сохранить эти данные в другом формате в Oracle.В настоящее время у меня есть следующая таблица:

CREATE TABLE json_documents (
  id    RAW(16) NOT NULL,
  data  CLOB,
  CONSTRAINT json_documents_pk PRIMARY KEY (id),
  CONSTRAINT json_documents_json_chk CHECK (data IS JSON)
);

И я сделал следующую вставку:

INSERT INTO json_documents (id, data)
VALUES (SYS_GUID(),
  '[{  
      "rid7":"9R1CODE",
      "rid":[  

      ]
   },
   {  
      "rid7":"ZB0CODE",
      "rid":[  
         {  
            "rid10":"WB10123124",
            "rid17":"WB10123124ZB0CODE"
         }
      ]
   },
   {  
      "rid7":"ZB1CODE",
      "rid":[  
         {  
            "rid10":"ZKH9875435",
            "rid17":"ZKH9875435ZB1CODE"
         }
      ]
   }]');

Теперь, если я выполню следующее, выберите:

SELECT a.data.rid7
FROM JSON_DOCUMENTS a;

Iполучить следующий результат:

[9R1CODE,ZB0CODE,ZB1CODE]

, в то время как я хотел бы получить результаты в одном столбце, но в разных строках.Есть способ сделать это?Как я могу различить несколько «rid7» в одной строке в моей таблице json_documents?

Также, как я могу получить доступ к различным «rid10», которые есть в моем файле JSON?

Я также попытался использовать json_value следующим образом:

SELECT JSON_VALUE(a.data, '$.rid7')
FROM JSON_DOCUMENTS a;

, но запрос привел к нулевому значению.Почему?

1 Ответ

0 голосов
/ 06 декабря 2018

вы можете использовать json_table для этой цели.Параметр NESTED PATH помогает.

проверьте мой ответ в соответствии с полученным результатом.

select CONDITION from 
  json_table('{"test": ["9R1CODE","ZB0CODE","ZB1CODE"]}', '$' 
  columns (test varchar2(100) format json path '$',
    nested path '$.test[*]'
      columns (  condition varchar2(100)  path '$')));

для второго вопроса, вы можете использовать

SELECT JSON_VALUE(a.data, '$.*.rid10')
FROM JSON_DOCUMENTS a;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...