[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Nov 2017
    Beiträge
    25

    HTTPS Aufruf mit JSON Input

    Hallo Zusammen,

    ich habe bereits einige https Aufrufe auf unserer i5 mit Hilfe der LIBHTTP API durchgeführt.
    In diesen Fällen habe ich aber immer XML als In- und Output verwenden.
    Die Methode dafür war die "http_url_post_xml()".

    Nun möchte ich das Gleiche mit JSON machen. Kann mir jemand sagen wie und ob das funktioniert? Evtl. gibt es auch eine bessere Methode z.B. via SQL oder ähnliches.
    Unsere i5 hat aktuell die Version V7R2.

    Danke im Voraus!

    Gruß
    derMuller

  2. #2
    Registriert seit
    Jan 2012
    Beiträge
    1.102
    Wir holen uns Daten eines Webservices mit den SQL-Funktionen aus SYSTOOLS.
    Z,B.:

    Code:
             select * from JSON_TABLE(systools.httpGetClob(:url,:header),
                '$'
                columns(
                   totalHits         decimal(12) PATH 'lax $.totalHits',
                   offset            decimal(12) PATH 'lax $.offset',
                   limit             decimal(12) PATH 'lax $.limit',
                   nested '$.hits[*]'
                      columns(
                         hits_type       varchar(40)    path 'lax $.type',
                         hits_id         decimal(15)    path 'lax $.id',
                         hits_score      decimal(15, 6) path 'lax $.score',
                         hits_anschrift  varchar(500)   path 'lax $.anschrift'
                      )
                )
             ) as liste
             order by hits_score desc;
    Wir haben 7.3. Ich glaube, JSON_TABLE kam erst mit 7.3.

    Dieter

  3. #3
    Registriert seit
    Nov 2017
    Beiträge
    25
    Zitat Zitat von dschroeder Beitrag anzeigen
    Wir holen uns Daten eines Webservices mit den SQL-Funktionen aus SYSTOOLS.
    Z,B.:

    Code:
             select * from JSON_TABLE(systools.httpGetClob(:url,:header),
                '$'
                columns(
                   totalHits         decimal(12) PATH 'lax $.totalHits',
                   offset            decimal(12) PATH 'lax $.offset',
                   limit             decimal(12) PATH 'lax $.limit',
                   nested '$.hits[*]'
                      columns(
                         hits_type       varchar(40)    path 'lax $.type',
                         hits_id         decimal(15)    path 'lax $.id',
                         hits_score      decimal(15, 6) path 'lax $.score',
                         hits_anschrift  varchar(500)   path 'lax $.anschrift'
                      )
                )
             ) as liste
             order by hits_score desc;
    Wir haben 7.3. Ich glaube, JSON_TABLE kam erst mit 7.3.

    Dieter
    Das wäre auch meine favorisierte Lösung! Danke dafür!
    Nur leider haben sowohl wir, als auch unserer Kunden nur die Version V7R2

  4. #4
    Registriert seit
    Aug 2014
    Beiträge
    179
    Hallo,
    die gute Nachricht ist, dass JSON_TABLE auch für 7.2 über das TR6 verfügbar ist.

    Code:
    Select x.*
      from JSON_TABLE(
         SYSTOOLS.HTTPGETCLOB('http://www.myhofi.com/myapp/websrv01.pgm?id=1',''), 
         '$'
         Columns(
            nested '$.items[*]' columns (
                "Id"        integer        path 'lax $.id',
                "Name"      varchar(40)    path 'lax $.name',
                "Country"   varchar(2)     path 'lax $.country',
                "City"      varchar(40)    path 'lax $.city',
                "Street"    varchar(40)    path 'lax $.street', 
                "Sales"     dec(15, 2)     path 'lax $.sales',
                "Credit"    dec(15, 2)     path 'lax $.credit',
                "Balance"   dec(15, 2)     path 'lax $.balance',
                "Date"      varchar(10)    path 'lax $.date'
            )
        )
      ) x;
    Das Beispiel ist OpenSource und auf Github über folgenden Link zu erreichen
    https://github.com/RainerRoss/WEBSRV...JSON_TABLE.sql

  5. #5
    Registriert seit
    Nov 2017
    Beiträge
    25
    Hallo Zusammen,

    das mit dem TR6 war ein guter Tipp, danke dafür .
    Damit funktioniert dann auch die Methode "HttpPostClob". (zumindest auf unserem System).
    Leider gibt es einen Fehler wenn ich den gleichen Befehl auf einem anderen System ausführe!

    Beide Systeme habe die PTF Group SF99702 mit Level 16 installiert.
    Trotzdem scheint auf einem System etwas zu fehlen.
    Der folgende Befehl funktioniert nur auf einem der Systeme:

    select systools.httppostclob(url, cast('header' as clob(1K)), cast('<input>' as clob(10k))) from sysibm.sysdummy1

    Nun erhalte ich auf dem einen System den Fehler:
    CAST von CHAR FOR BIT DATA in CLOB nicht unterstützt.

    Weiß jemand wie man raus finden kann, welche PTF's benötigt werden?
    Oder liegt es vielleicht an etwas anderem?

    Danke im Vorraus!

    Gruß
    derMuller

Similar Threads

  1. https: aufrufen
    By malti in forum IBM i Hauptforum
    Antworten: 7
    Letzter Beitrag: 11-07-17, 10:29
  2. Parameternamen bei Webservice REST im JSON-Format
    By Flappes in forum NEWSboard Programmierung
    Antworten: 4
    Letzter Beitrag: 01-06-17, 09:01
  3. Logging FTP-Input
    By Flappes in forum IBM i Hauptforum
    Antworten: 19
    Letzter Beitrag: 24-03-17, 14:26
  4. JSON in RPG verarbeiten
    By dschroeder in forum NEWSboard Programmierung
    Antworten: 13
    Letzter Beitrag: 13-07-16, 15:23
  5. WebService über HTTPS
    By harbir in forum NEWSboard Programmierung
    Antworten: 3
    Letzter Beitrag: 26-03-14, 14:13

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •