[NEWSboard IBMi Forum]
Seite 1 von 2 1 2 Letzte
  1. #1
    Registriert seit
    Jun 2001
    Beiträge
    1.973

    Rest Anfrage und Json return

    Moin *all
    für eine neue Schnittstelle muß ich eine REST anfrage machen und ich bekomme Daten im Json Format zurück.
    Da es bisher kein Beispiel (vom Schnittstellenanbieter) gibt, wie gehen wir vor?

    1. wir bilden je AnfrageTyp den String mit der URL, den wir später mit HttpGetClob 'weggeben'
    PHP-Code:
    eval URL 'HTTP://'  + %trim(Servername) + ':80' '/XX/GetNotiz/{notizId}' 
    Frage: Muß ich die notizId in der geschweiften Klammer weggeben oder ist das eine Syntax um eine Variable darzustellen?

    Dann bekomme ich ein Json zurück
    PHP-Code:
    Definiere ich da eine DS die dann gefüllt ist?
     
    Passiert da eine Typ Größenprüfung
     Was geschied
    wenn ich eine Variable 50A Definiere aber 55 Byte kommen?
     
    Abbruch oder abgeschnitten?
     
    Muß ich eine DIM oder eine OCCUR Tabelle definierenwenn der Aufruf mehrere 'Datensätze'
     
    zurück liefertAuch hier... was geschiedwenn die Tabelle nicht groß genug ist
    Oder definiere ich nur einen großen String, den ich später selber auslese

    Es kommen teilweise 150 Felder zurück, von dehnen ich 2 der 3 verwenden muß

    Danke
    Robi
    Das Notwendige steht über dem technisch machbaren.
    (klingt komisch, funktioniert aber!)

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    Wie würde Birgitta nun antworten?
    Nimm doch einfach mal SQL:

    https://www.ibm.com/support/knowledg.../rbafyjson.htm

    Funktioniert im Prinzip nicht anders als XML:

    https://www.ibm.com/support/knowledg...yjsontable.htm
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  3. #3
    Registriert seit
    Jun 2001
    Beiträge
    1.973
    ???
    Das will ich doch ...
    http://newsolutions.de/forum-systemi...https-aufrufen

    daher doch die Fragen!
    irgendwo anders wurde ein Json in eine DS eingelesen
    Das Notwendige steht über dem technisch machbaren.
    (klingt komisch, funktioniert aber!)

  4. #4
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    Den ermittelten CLOB übergibst du dann an den JSON_TABLE mit der Definition des Pfades und der Knoten. Die Typisierung kommt durch die Spaltendefinition, so dass Werte gecasted werden.
    Du bekommst natürlich nur eine relationale Sicht der Daten, aber du kannst ja die Ebene mit Mehrfachvorkommen auswählen und per "../"-Notation auf übergeordnete Pfade zugreifen.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  5. #5
    Registriert seit
    Jun 2001
    Beiträge
    1.973
    Gibt es irgendwo ein Beispiel ohne FREE
    Der SEU nervt wenn ich Free verwende.
    Und beim Umsetzen Free / nicht free mach ich auch immer Fehler bei den datenstrukturen

    Da wäre was zum abgucken hilfreich.
    Das Notwendige steht über dem technisch machbaren.
    (klingt komisch, funktioniert aber!)

  6. #6
    Registriert seit
    Jun 2001
    Beiträge
    1.973
    Fragen zu diesem Beispiel, das ich im netz gefunden und abgeschrieben habe
    (es funktioniert)
    PHP-Code:
    **free
    dcl
    -s json sqltype(clob:32767);
    dcl-s wid varchar(10);
    dcl-s wnom varchar(10);
    dcl-s wtel char(12);
    JSON_data='{                                                    +
                 "id" : 901,                                        +
                 "name" : { "first":"John", "last":"Doe" },         +
                 "phones" : [{"type":"home", "number":"555-3762"},  +
                             {"type":"work", "number":"555-7252"}   +
                            ]                                       +
               }'
    ;

    json_len = %len(%trimr(json_data));
    EXEC SQL
      select id
    lasttel into :wid, :wnom, :wtel
        from JSON_TABLE
    (:json'$'
         
    COLUMNSid VARCHAR(10PATH '$.id',
                  
    first VARCHAR(10PATH '$.name.first',
                  
    last VARCHAR(10PATH '$.name.last',
                  
    tel CHAR(12PATH 'lax $.phones[0].number')
        ) AS 
    X;

        
    dsply (wid +'-' wnom);

    *
    INLR=*ON
    Fragen:
    JSON ist als Clob definiert
    JSON_Len ist gar nicht definiert --> ist also eine reserviertes Wort?
    JSON_Data ist definiert und enthällt die Daten, der SELECT geht aber auf JSON_TABLE(:JSON, --> Also ist DATA auch ein fester Wert, der zu der eigendlichen Variable gehört?

    Wenn ich mit HTTPGETCLOB die Daten in das CLOB MyClob Feld lese, was ist dan mit einem MyClob_DATA ? Wie sieht dann der Befehl aus?
    Das Notwendige steht über dem technisch machbaren.
    (klingt komisch, funktioniert aber!)

  7. #7
    Registriert seit
    Aug 2003
    Beiträge
    1.508
    Hi Robi,

    Im Debugger oder auch im Spool müsstest du sehen, dass der Precompiler aus der definition JSON eine DS macht mit 2 Unterfelder (JSON_LEN + JSON_DATA).
    Das gleiche hast du auch wenn du Strings Pointer in RPG definierst. In Data stehen die Werte und in LEN wie lang der "Pointer" ist.

    Du könntest auch mit SQL eine Globale CLOB Variable erstellen die du mit:
    exec sql Set :myClob ...
    befüllst und im SELECT auch direkt verwendest.

    lg Andreas

  8. #8
    Registriert seit
    Jun 2001
    Beiträge
    1.973
    Ja, danke
    CLOB ist das Stichwort, JSON ist nur ein x-beliebiger Name (da hab ich wohl den Wald vor lauter Bäumen nicht gesehen)

    Trotzdem krieg ich irgendwie die Kurve nicht

    1. Wenn ich den Clob eingelesen habe und dieser mehrere 'Sätze' enthällt
    - kann ich den mit prepare und fetch 'durch' lesen?
    - Wenn er (beim Einlesen) 'überläuft', habe ich dann einen Abbruch im httpgetclob oder den letzten Satz nur zur Hälfte? Letzteres wäre ja kein Problem
    - Wie setze ich JSON_len, wenn im Clob mehrere 'Sätze' sind die unterschiedlich lang sind, die 'Satzlänge'
    weis ich doch erst, wenn ich die Daten gelesen habe.

    ggf denke ich z.zt. etwas kompliziert.
    Clob kenn ich nur aus einer Funktion mit der wir PDF in der DB Speichern und vorholen, JSON und REST sind Neuland.

    Danke
    Das Notwendige steht über dem technisch machbaren.
    (klingt komisch, funktioniert aber!)

  9. #9
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    Der CLOB muss in der Größe der max. Datenlänge definiert sein (z.B. 10M, 1G).
    Dieser wird dann durch den Request komplett gefüllt.
    Ist der CLOB zu klein, gibts (wie immer) was auf die Finger.
    Nun gibst du diese Variable ja an die Table-Function und mit Fetch liest du nun alle Zeilen nach und nach aus, so wie mit normalen Tabellen eben auch.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  10. #10
    Registriert seit
    Jun 2001
    Beiträge
    1.973
    OK, Danke
    was auf die Finger.
    bedeutet wohl Abbruch. Also groß genung definieren!

    lt. Beispiel bekomme ich ggf soetwas zurück
    "DatumBezahlung":null

    Interpretiert das JSOB_TABLE lesen dieses null und ich kan mit den null Indikatoren beim einlesen arbeiten
    oder muß ich alle Werte die null werden können Alpha definieren und selber basteln?

    und lt. Text Dokumentation kommt etwas wie
    "Betrag":10.00 also Punkt statt Komma.

    'Kann' JSON_Table das, weil es in der Nicht AS/400 Welt 'normal' ist oder was muß ich machen.
    Das Notwendige steht über dem technisch machbaren.
    (klingt komisch, funktioniert aber!)

  11. #11
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    Punkt statt Komma must du für die aktuelle Umgebung das Dezimalformat setzen (leider Compile-Time per "Set Option ...".
    In wie weit nun "null" als NULL-Value oder als Text "null" interpretiert wird kann ich nicht sagen.
    Normalerweise gibt es da einen Leerstring.
    Ich denke also, dass du diese Felder dann als Zeichenfelder definieren musst und per %dec()-Inlinefunktion dann umwandeln musst. Das mache ich bei XML allerdings auch schon so (Zahlen, Datum).
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  12. #12
    Registriert seit
    Aug 2018
    Beiträge
    7
    Hallo *All

    ich habe zu diesem Thema noch eine Frage und zwar habe ich einen langen JSON-String mit mehreren sich wiederholenden Segmenten, diese will ich jetzt nicht immer einzeln angeben sondern dynamisch durchgehen und dort weiß ich nicht genau wie ich es angeben soll.

    Wenn ich
    'lax $.list[0].id') angebe kommt der erste Wert und es geht gut.
    Wie muss ich es jetzt noch angeben, das er die einzelnen Id durchgeht?

    JSON_Data={"list":[{"id":1},{"
    id
    ":2},{"
    id
    ":3},{"
    id
    ":4}}


    Exec Sql
    Declare Mycursor Cursor For
    select id
    from JSON_TABLE(:json, '$' COLUMNS( id VARCHAR(10) PATH 'lax $.list[???].id'))
    For Fetch Only;



    Exec Sql
    Open Mycursor;

    dow Sqlcode = *zero;
    Exec Sql
    Fetch Mycursor Into :wid;


    If Sqlcode = *zero;
    dsply wid;
    Endif;
    enddo;



    Danke im voraus,
    Kerki

Similar Threads

  1. Parameternamen bei Webservice REST im JSON-Format
    By Flappes in forum NEWSboard Programmierung
    Antworten: 4
    Letzter Beitrag: 01-06-17, 09:01
  2. Systemanfrage 2 (Vorherige Anfrage beenden) im RPG abfangen ?
    By harkne in forum NEWSboard Programmierung
    Antworten: 17
    Letzter Beitrag: 30-09-16, 11:16
  3. JSON in RPG verarbeiten
    By dschroeder in forum NEWSboard Programmierung
    Antworten: 13
    Letzter Beitrag: 13-07-16, 15:23
  4. XML-Into Return Code
    By DEVJO in forum NEWSboard Programmierung
    Antworten: 1
    Letzter Beitrag: 29-10-15, 12:30
  5. Return aus SQL Procedure
    By dabeda in forum NEWSboard Programmierung
    Antworten: 14
    Letzter Beitrag: 05-03-15, 13:53

Berechtigungen

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