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

    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.549
    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

    Contractor for Fresche Solutions Inc.
    Anwendungsmodernisierung, Beratung, Schulungen im Bereich RPG, SQL und Datenbank

  3. #3
    Registriert seit
    Jan 2012
    Beiträge
    880
    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

Ähnliche Themen

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

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •