[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Jan 2012
    Beiträge
    1.102

    Mit JSON_TABLE Array abfragen

    Hallo,

    ich möchte ein JSON Dokument parsen.

    Wenn ich ein JSON habe, das aus einem Objekt besteht und ein Array beinhaltet, kann ich das problemlos parsen:

    Beispiel: (Das Objekt heißt Personen und beinhaltet ein Array mit Namen und Vornamen):
    Code:
    set jsontest = '{ "personen" :[ {"name": "Müller", "vorname" : "Hans"}, {"name": "Meier", "vorname" : "Hugo"} ] }';
    
    
    select * from JSON_TABLE(jsontest,
    'lax $'
    columns(
    nested '$.personen[*]'
              columns( "name" varchar(40),
                       "vorname" varchar(40)
                     )
           )
    ) as json
    ;
    Das obige Beispiel funktioniert sehr schön. Ich bekomme eine Tabelle mit den Namen und Vornamen.

    Mein Problem ist, dass das JSON, was ich bekomme, nicht ganz so aussieht wie das obige JSON. Mein JSON fängt direkt mit den eckigen Klammern an. Ich habe also kein Objekt "Personen", auf das ich mich beim parsen beziehen kann. Ein JSON Validator im Internet bestätigt aber, dass es sich um gültiges JSON handelt.

    Hier mein eigentliches JSON, das geparsed werden soll:
    Code:
    set jsontest = '[ {"name": "Müller", "vorname" : "Hans"}, {"name": "Meier", "vorname" : "Hugo"} ]';
    Hat jemand eine Idee, wie man das obige JSON parsen kann?
    Im Notfall müsste ich mir vorher einen Objektnamen künstlich dranbasteln. Das fände ich aber unschön.

    Danke im Voraus!

    Dieter

  2. #2
    Registriert seit
    Aug 2001
    Beiträge
    2.869
    Das wird aktuell auch nicht von JSON_TABLE unterstützt. Soweit ich weiß gibt es hierfür jedoch einen RFE.
    Der zu parsende String muss immer aktuell mit einem Objekt beginnen.
    Also muss man ein bisschen tricksen.

    Da es sich bei den JSON-Daten um einen Text-String handelt, kannst du das Array einfach in ein Objekt packen und dann den so gebildeten String auflösen.

    Code:
    select * from JSON_TABLE('{personen: ' concat jsontest concat '}',
    '$.personen[*]'
              columns( "name" varchar(40),
                       "vorname" varchar(40)
                     )
           )
    ) as json
    Birgitta
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 4. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  3. #3
    Registriert seit
    Jan 2012
    Beiträge
    1.102
    Vielen Dank, Birgitta!

    Genau diesen Hack hatte ich mir auch überlegt. Ich hatte nur gedacht, dass es da eine elegantere Lösung gibt. Aber wenn es da bereits einen RFE gibt, muss ich mir keine Gedanken machen, ob es im Moment etwas besseres gibt.

    Dieter

Similar Threads

  1. mit SQL in ein array lesen
    By dibe in forum NEWSboard Programmierung
    Antworten: 7
    Letzter Beitrag: 21-01-19, 14:52
  2. JSON_TABLE in dynamischem SQL verwenden
    By dschroeder in forum NEWSboard Programmierung
    Antworten: 15
    Letzter Beitrag: 20-12-18, 11:11
  3. mehrdimensionalen Array durchsuchen
    By svit in forum NEWSboard Programmierung
    Antworten: 3
    Letzter Beitrag: 01-10-15, 12:54
  4. suche in Datenstruktur Array
    By woodstock99 in forum NEWSboard Programmierung
    Antworten: 8
    Letzter Beitrag: 15-01-14, 17:57
  5. Array mit Sql befüllen
    By tarkusch in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 25-12-13, 15:15

Berechtigungen

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