oracle - получить первые n json объектов из json массива - PullRequest
0 голосов
/ 29 мая 2020

У меня есть таблица, в которой в одном столбце есть данные массива json. в некоторых строках это json очень большое (с 10000+ json объектов), как показано ниже. хотел знать, есть ли способ просто выбрать первые 250 объектов из массива -

[
   {
      "product":"Vegetable",
      "name":"Potato",
      "price":"$60.00"
   },
   {
      "product":"Fruit",
      "name":"Mango",
      "price":"$3.30"
   },
   {
      "product":"Milk",
      "name":"Milk",
      "price":"$1.08"
   },
.....10,000
]

Ответы [ 2 ]

1 голос
/ 29 мая 2020

Функция analyti c, такая как ROW_NUMBER(), может использоваться в подзапросе для определения ограничения, а затем может быть добавлена ​​комбинация JSON_ARRAYAGG() и JSON_OBJECT(), чтобы вернуть уменьшенный массив:

SELECT JSON_ARRAYAGG(
                     JSON_OBJECT('product' VALUE product, 
                                 'name'    VALUE name,
                                 'price'   VALUE price) ) AS "Result"
  FROM
  (
   SELECT t.*, ROW_NUMBER() OVER (ORDER BY 1) AS rn
     FROM tab
    CROSS JOIN
     JSON_TABLE(jsdata, '$[*]' COLUMNS (
                 product VARCHAR(100) PATH '$.product',
                 name    VARCHAR(100) PATH '$.name',
                 price   VARCHAR(100) PATH '$.price'
                )
     ) t
   )
 WHERE rn <= 250 

Демо

1 голос
/ 29 мая 2020

Я изучил вопрос и обнаружил, что можно использовать json_query для выбора отдельных записей из JSON.

CREATE TABLE json_table ( JSON varchar(1024) NOT NULL , constraint CK_JSON_IS_JSON check (JSON is json));

insert into json_table columns (JSON) values ('[ { "product":"Vegetable", "name":"Potato", "price":"$60.00" }, { "product":"Fruit", "name":"Mango", "price":"$3.30" }, { "product":"Milk", "name":"Milk", "price":"$1.08" }]');

select json_query(JSON, '$[0]'), 
       json_query(JSON, '$[1]'), 
       json_query(JSON, '$[2]'), 
       json_query(JSON, '$[3]') 
from json_table;

Это выбирает записи от 0 до 3, при этом 3 не найдены и имеет значение NULL.

Вероятно, вы могли бы сшить вместе хранимую процедуру базы данных, чтобы вернуть список первых n записей в JSON.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...