[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Jan 2019
    Beiträge
    45

    Json mit SQL auslesen

    Hallo zusammen,

    ich habe die unten stehende JSON Datei und möchte diese mit folgendem SQL auslesen:

    Code:
    SELECT *
    FROMJSON_TABLE(
        (Select line fromtable(qsys2.ifs_read_utf8('/test/so3.json')) fetchfirstrowonly), 
    '$'
    COLUMNS (
            VOUCHERTYPE     VARCHAR(10) PATH'$.vouchertype',
            VOUCHERNO       VARCHAR(20) PATH'$.voucherno',
            WAREHOUSENO     VARCHAR(10) PATH'$.warehouseno',
    
    NESTED'$.supplier'
    COLUMNS (
                SUPPLIERNO      VARCHAR(15) PATH'$.supplierno',
                NAME1           VARCHAR(50) PATH'$.name1',
                EMAIL           VARCHAR(50) PATH'$.email',
                PHONE           VARCHAR(30) PATH'$.phone',    
    NESTED'$.address[*]'
    COLUMNS (
                    STREET          VARCHAR(50) PATH'$.street',
                    ZIPCODE         VARCHAR(10) PATH'$.zipcode',
                    CITY            VARCHAR(50) PATH'$.city',
                    ADDRESSTYPE     VARCHAR(10) PATH'$.addresstype',
                    COUNTRYCODETYPE VARCHAR(10) PATH'$.countrycodetype',
                    COUNTRYCODE     VARCHAR(5)  PATH'$.countrycode'
                )
            ),
    
    NESTED'$.lineitems[*]'
    COLUMNS (
                SKU             VARCHAR(50) PATH'$.sku',
                LINEITEMNO      VARCHAR(10) PATH'$.lineitemno',
                ARTICLENAME     VARCHAR(100) PATH'$.articlename',
                ORDEREDQUANTITY DECIMAL(10,2) PATH'$.orderedquantity',
    
    NESTED'$.productcodes[*]'
    COLUMNS (
                    PRODUCTCODETYPE VARCHAR(10) PATH'$.type',
                    PRODUCTCODE     VARCHAR(50) PATH'$.value'
                )
            )
        )
    );
    Warum bekomme ich dann zwei Zeilen und nicht eine? Wahrscheinlich hängt es mit meinem Gebrauch der NESTED zusammen aber ich schaffe es einfach nicht, dass er alles in einer Zeile ausliest:
    Click image for larger version. 

Name:	Screenshot 2024-12-18 113539.jpg 
Views:	53 
Size:	52,4 KB 
ID:	683
    Wäre sehr nett wenn mir hier jemand bitte eine Tipp geben kann.

    Hier das Json:
    Code:
    {
        "vouchertype": "AB",
        "voucherno": "1234567",
        "warehouseno": "123",
        "supplier": {
            "name1": "Test GmbH",
            "email": "info@test.com",
            "phone": "012345-6789",
            "address": [
                {
                    "street": "Test-Straße 33",
                    "zipcode": "12345",
                    "city": "Testort",
                    "addresstype": "HOME",
                    "countrycodetype": "ISO31661",
                    "countrycode": "DE"
                }
            ],
            "supplierno": "12345"
        },
        "lineitems": [
            {
                "sku": "1234567890",
                "lineitemno": "1.000",
                "articlename": "Testartikel",
                "orderedquantity": 100,
                "productcodes": [
                    {
                        "type": "EAN",
                        "value": "1234567890"
                    }
                ]
            }
        ]
    }
    Gruß
    Sebastian

  2. #2
    Registriert seit
    Jun 2012
    Beiträge
    30
    Was ist wenn es mehrere Adressen gibt?
    Wie soll er sich dann verhalten?
    Aber wenn es nur eine Adresse gibt, könntest du es auch ggf. so lösen:


    Code:
    SELECT *
    FROM JSON_TABLE(
        (Select line from table(qsys2.ifs_read_utf8('/test/so3.json')) fetch first row only),  
    '$'
    COLUMNS (
            VOUCHERTYPE     VARCHAR(10) PATH'$.vouchertype',
            VOUCHERNO       VARCHAR(20) PATH'$.voucherno',
            WAREHOUSENO     VARCHAR(10) PATH'$.warehouseno',
            SUPPLIERNO      VARCHAR(15) PATH'$.supplier.supplierno',
            NAME1           VARCHAR(50) PATH'$.supplier.name1',
            EMAIL           VARCHAR(50) PATH'$.supplier.email',
            PHONE           VARCHAR(30) PATH'$.supplier.phone',    
    NESTED '$.supplier.address[*]'
    COLUMNS (
              STREET          VARCHAR(50) PATH'$.street',
              ZIPCODE         VARCHAR(10) PATH'$.zipcode',
              CITY            VARCHAR(50) PATH'$.city',
              ADDRESSTYPE     VARCHAR(10) PATH'$.addresstype',
              COUNTRYCODETYPE VARCHAR(10) PATH'$.countrycodetype',
              COUNTRYCODE     VARCHAR(5)  PATH'$.countrycode'
            ),
    
    NESTED '$.lineitems[*]'
    COLUMNS (
                SKU             VARCHAR(50) PATH'$.sku',
                LINEITEMNO      VARCHAR(10) PATH'$.lineitemno',
                ARTICLENAME     VARCHAR(100) PATH'$.articlename',
                ORDEREDQUANTITY DECIMAL(10,2) PATH'$.orderedquantity',
    
    NESTED '$.productcodes[*]'
    COLUMNS (
                    PRODUCTCODETYPE VARCHAR(10) PATH'$.type',
                    PRODUCTCODE     VARCHAR(50) PATH'$.value'
                )
            )
        )
    );

Similar Threads

  1. SQL Based Webservice im IWS: Get mit Input-JSON
    By dschroeder in forum NEWSboard Programmierung
    Antworten: 25
    Letzter Beitrag: 10-04-24, 19:33
  2. Verschachteltes JSON mit SQL
    By Domeus in forum NEWSboard Programmierung
    Antworten: 6
    Letzter Beitrag: 21-09-23, 08:02
  3. IWS Server mit SQL und Multirow JSON/XML als Input
    By Andreas_Prouza in forum IBM i Hauptforum
    Antworten: 10
    Letzter Beitrag: 18-01-23, 14:30
  4. IWS nested JSON bei POST Aufruf mit SQL verarbeiten
    By ismiavoiwuascht in forum NEWSboard Programmierung
    Antworten: 3
    Letzter Beitrag: 17-10-21, 21:17
  5. JSON Daten mit SQL auslesen
    By Kerki in forum NEWSboard Programmierung
    Antworten: 8
    Letzter Beitrag: 26-01-21, 09:46

Berechtigungen

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