Oracle Apex 22.21 — источник данных REST — вложенный массив JSON — обнаружение

Мне нужно получить источник данных APEX Rest для анализа моего JSON, который имеет вложенный массив. Я читал, что вложенные массивы JSON не поддерживаются, но должен быть способ.

У меня есть REST API, который возвращает данные через JSON, как показано ниже. В Apex я создал источник данных REST, следуя руководству в этом блоге Oracle ссылка

Однако функция автоматического обнаружения не «обнаруживает» вложенный массив. Он возвращает только данные корневого уровня.

[ {
  "order_number": "so1223",
  "order_date": "2022-07-01",
  "full_name": "Carny Coulter",
  "email": "[email protected]",
  "credit_card": "3545556133694494",
  "city": "Myhiya",
  "state": "CA",
  "zip_code": "12345",
  "lines": [
    {
      "product": "Beans - Fava, Canned",
      "quantity": 1,
      "price": 1.99
    },
    {
      "product": "Edible Flower - Mixed",
      "quantity": 1,
      "price": 1.50
    }
  ]
},
{
  "order_number": "so2244",
  "order_date": "2022-12-28",
  "full_name": "Liam Shawcross",
  "email": "[email protected]",
  "credit_card": "6331104669953298",
  "city": "Humaitá",
  "state": "NY",
  "zip_code": "98670",
  "lines": [
    {
      "order_id": 5,
      "product": "Beans - Green",
      "quantity": 2,
      "price": 4.33
    },
    {
      "order_id": 1,
      "product": "Grapefruit - Pink",
      "quantity": 5,
      "price": 5.00
    }
  ]
},
]

Таким образом, в приведенном выше JSON он «обнаруживает» только order_numbers до zip_code. Массив «lines» с атрибутами «order_id», «product», «quantity» и «price» не «обнаруживается».

Я нашел этот ТАКОЙ вопрос, в котором Карстен инструктирует создать источник данных Rest вручную. Я попытался изменить селектор строк на "." (точка) и оставить его пустым. Это по-прежнему возвращает данные корневого уровня.

Изменение селектора строк на «линии» возвращает только 1 массив для каждой «линии».

Таким образом, в приведенном выше примере JSON он только «обнаружит»:

    {
      "product": "Beans - Fava, Canned",
      "quantity": 1,
      "price": 1.99
    }
    {
      "order_id": 5,
      "product": "Beans - Green",
      "quantity": 2,
      "price": 4.33
    }

а не весь массив..

Вот как настраивается профиль данных при создании источника данных вручную.

Есть еще один вопрос SO с похожей ситуацией, поэтому я выполнил некоторые шаги, такие как выбор типа данных для «линий» в качестве документа JSON. Я чувствую, что пробовал почти все селекторы и типы данных. Но явно недостаточно.

Документы не очень полезны по этому вопросу, и было трудно найти ссылки в Google, блогах Oracle или SO.

Моя конечная цель состояла бы в том, чтобы две таблицы, как показано ниже, автоматически синхронизировались с API.

orders
    id pk
    order_number num
    order_date date
    full_name vc(200)
    email vc(200)
    credit_card num
    city vc(200)
    state vc(200)
    zip_code num

    lines
        order_id /fk orders
        product vc(200)
        quantity num
        price num

view orders_view orders lines
 
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
54
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Как вы правильно заметили, источники данных REST не поддерживают вложенные массивы - источник REST может «извлекать» только одну плоскую таблицу из ответа JSON. В вашем примере JSON как таковой представляет собой массив («заказы»). Таким образом, селектор строк в профиле данных будет «.» (для выбора «корневого узла»).

Это дает вам все атрибуты порядка, но обнаружение пропустит массив lines. Однако вы можете вручную добавить в профиль данных столбец с типом данных JSON Document и использовать строки в качестве селектора.

В результате вы все равно получите плоскую таблицу из источника данных REST, но эта таблица содержит столбец LINES, который содержит «фрагмент JSON» для элементов строки заказа. Затем вы можете синхронизировать источник REST с локальной таблицей («Синхронизация REST»), а затем использовать некоторый пользовательский код для извлечения фрагментов JSON в дочернюю таблицу ORDER_LINES.

Это помогает?

Эй, Карстен, ты легенда. Ваши инструкции сработали именно так, как я хотел. Спасибо. Продолжил свой вопрос в другой теме. stackoverflow.com/questions/75192510/… Пожалуйста, посмотрите и посоветуйте. Ваша поддержка очень ценится .. не только мной .. Ура!

ckp7blessed 21.01.2023 11:07

Другие вопросы по теме