Как опубликовать JSON с помощью Oracle Rest Data Services

Я использую обычную базу данных Oracle (не похожую на NoSQL или что-то в этом роде) со службами данных Oracle. Мне нужно знать, как получить тело сообщения HTTP, используя pl / sql. Например,

отправьте объект json в приложение oracle express через службу данных oracle rest, внутри приложения express откройте тело сообщения и получите содержимое, структурированное с помощью json, и извлеките поля одно за другим.

2 ответа

Решение

Если вы установите последнюю версию APEX 5.0, выпущенную 15 апреля, вы получите доступ к великолепному API для работы с JSON.

Я использую его на 11.2 и смог обработать каждый json, от простых до очень сложных объектов с несколькими массивами и уровнями 4/5. APEX_JSON

Если вы не хотите использовать APEX. Просто установите среду выполнения, чтобы получить доступ к API.

Пример (реального) метода POST, который принимает очень сложный объект JSON. Массив с несколькими объектами и подгруппами глубиной 3-5 уровней. Пример Oracle Apex POST json

Я беру все тело и отправляю в пакет для хруста. (тело). apikey поставляется с заголовком (здесь не применимо).

: body - это blob, поэтому пакет должен преобразовать его в clob и выполнить любое преобразование набора символов, если ваша база данных не UTF8.

После этого вы берете clob и анализируете его как json.

apex_json.parse (p_source => l_clob);

В моем случае начальный объект - это массив, поэтому я перебираю все элементы с помощью

for i in 1 .. nvl (apex_json.get_count (p_path => '.'), 0) loop

Пример поиска значения varchar2

l_app.medication_description := apex_json.get_varchar2 ('[%d].regularMedicationDetails', i);

Где "i" ссылается на n-й объект в массиве.

Как опытный программист на PL/SQL, эта установка ввергла меня в современный мир, управляемый сетью.

Я удалил свой предыдущий пост. Вы можете получить тело как BLOB и преобразовать в символ для работы, но по крайней мере в версии 4.2 размещенного экземпляра Application Express на apex.oracle.com я получил это для работы с автоматическим связыванием значений JSON.

Begin
  htp.p('JSON ename = ' || :ename);
  htp.p('JSON dept = ' || :dept);

  insert into emp(ename, deptno)
    values (:ename, :dept);
  htp.p('Rows Inserted = ' || sql%rowcount);

end;

Вы можете проверить это, разместив что-то вроде этого:

{"ename": "Seema", "dept": 10}

на демонстрацию по адресу: https://apex.oracle.com/pls/apex/gjarmiolowski/hr/employees/

убедитесь, что заголовок Content-Type установлен на application/json

ОБНОВЛЕНИЕ: вот команда windows curl, которая работает curl --header "Content-type: application/json" --request POST --data-ascii "{\" ename \ ": \" hello \ ", \" dept \ ": \ "10 \"} " https://apex.oracle.com/pls/apex/gjarmiolowski/hr/employees/

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