Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   json für Dummies (https://www.delphipraxis.net/206667-json-fuer-dummies.html)

fabi17 16. Jan 2021 14:49

json für Dummies
 
Tag zusammen,

ich muss eine JSON Datei parsen und habe leider in den Ansätzen schon ziemliche Probleme. Dachte es wäre ein Klacks, aber ich kriege es einfach nicht gebacken... Hier das Beispiel JSON, den unteren Teil habe ich aufgrund der Länge jetzt mal abgeschnitten. Kann mir jemand einen Denkanstoß geben, wie ich jetzt auf beispielsweise die orderitems quantity zugreife...? :glaskugel:

Vielen Dank für Hilfe vorab!

{
"page":1,
"totalsCount":2,
"isLastPage":true,
"entries":[
{
"id":102,
"referrerId":0,
"roundTotalsOnly":true,
"numberOfDecimals":4,
"statusName":"Warten auf Zahlung",
"plentyId":52364,
"typeId":1,
"lockStatus":"unlocked",
"locationId":"1",
"createdAt":"2021-01-15T17:28:48+01:00",
"updatedAt":"2021-01-15T17:28:48+01:00",
"statusId":3,
"ownerId":"1",
"relations":[
{
"orderId":102,
"referenceType":"warehouse",
"referenceId":1,
"relation":"sender"
},
{
"orderId":102,
"referenceType":"contact",
"referenceId":102,
"relation":"receiver"
}
],
"properties":[
{
"orderId":102,
"typeId":3,
"value":"0"
},
{
"orderId":102,
"typeId":6,
"value":"de"
},
{
"orderId":102,
"typeId":1,
"value":"1"
},
{
"orderId":102,
"typeId":4,
"value":"unpaid"
},
{
"orderId":102,
"typeId":2,
"value":"6"
}
],
"dates":[
{
"orderId":102,
"typeId":2,
"date":"2021-01-15T17:28:48+01:00"
},
{
"orderId":102,
"typeId":4,
"date":"2021-01-15T17:28:48+01:00"
}
],
"amounts":[
{
"id":2,
"orderId":102,
"isSystemCurrency":true,
"isNet":false,
"currency":"EUR",
"exchangeRate":1,
"netTotal":0.93,
"grossTotal":1,
"vatTotal":0.07,
"invoiceTotal":1,
"paidAmount":0,
"giftCardAmount":0,
"createdAt":"2017-09-13T11:32:23+02:00",
"updatedAt":"2019-01-18T15:28:01+01:00",
"shippingCostsGross":0,
"shippingCostsNet":0,
"prepaidAmount":0,
"vats":[
{
"id":2,
"orderAmountId":2,
"countryVatId":1,
"vatField":0,
"vatRate":19,
"value":0.16,
"createdAt":"2017-09-29T12:07:28+02:00",
"updatedAt":"2019-01-18T15:28:55+01:00",
"netTotal":0.84,
"grossTotal":1
}
]
}
],
"orderReferences":[

],
"orderItems":[
{
"id":102,
"orderId":102,
"typeId":1,
"referrerId":0,
"itemVariationId":1015,
"quantity":1,
"orderItemName":"Loungesessel Wild Tokio",
"attributeValues":"",
"shippingProfileId":6,
"countryVatId":1,
"vatField":0,
"vatRate":19,
"position":"0",
"createdAt":"2021-01-15T17:28:48+01:00",
"updatedAt":"2021-01-15T17:28:48+01:00",
"warehouseId":1,
"orderProperties":[

],
"properties":[
{
"id":3,
"orderItemId":102,
"typeId":21,
"value":"1.00",
"createdAt":"2017-04-19T15:04:12+02:00",
"updatedAt":"2017-04-19T15:04:12+02:00"
}
],
"dates":[

],
"amounts":[
{
"id":2,
"orderItemId":102,
"isSystemCurrency":true,
"currency":"EUR",
"exchangeRate":1,
"purchasePrice":0,
"priceOriginalGross":0.5,
"priceOriginalNet":0.4202,
"priceGross":0.5,
"priceNet":0.4202,
"surcharge":0,
"discount":0,
"isPercentage":true,
"createdAt":"2016-08-30T16:21:51+02:00",
"updatedAt":"2019-01-18T15:25:41+01:00"
}
],
"references":[

]
},
...

Uwe Raabe 16. Jan 2021 15:02

AW: json für Dummies
 
Zitat:

Zitat von fabi17 (Beitrag 1481050)
Hier das Beispiel JSON, den unteren Teil habe ich aufgrund der Länge jetzt mal abgeschnitten.

Häng doch die komplette Datei als Attachment an. Wäre auch viel übersichtlicher.

venice2 16. Jan 2021 16:54

AW: json für Dummies
 
Am einfachsten wäre es damit.

IMPEGA 16. Jan 2021 18:36

AW: json für Dummies
 
Ich als Anfänger verweise an meinen Thread.
https://www.delphipraxis.net/206578-...ert-lesen.html

DeddyH hat ein TOP Beispiel gepostet. Damit kannst du alles auslesen. Von einfachem Wert, über Array bis Array in Array.
Funktioniert super und sehr leicht verständlich.

venice2 16. Jan 2021 18:40

AW: json für Dummies
 
Zitat:

Zitat von IMPEGA (Beitrag 1481059)
Ich als Anfänger verweise an meinen Thread.
https://www.delphipraxis.net/206578-...ert-lesen.html

DeddyH hat ein TOP Beispiel gepostet. Damit kannst du alles auslesen. Von einfachem Wert, über Array bis Array in Array.
Funktioniert super und sehr leicht verständlich.

Und. Was passiert wenn ein Eintrag nicht vorhanden ist?
Dann kracht es oder?

DeddyH 16. Jan 2021 19:08

AW: json für Dummies
 
Nö, es kracht nicht, aber man bekommt logischerweise auch kein Ergebnis.

venice2 16. Jan 2021 19:25

AW: json für Dummies
 
Zitat:

Zitat von DeddyH (Beitrag 1481061)
Nö, es kracht nicht, aber man bekommt logischerweise auch kein Ergebnis.

OK. Nur für meine Bedürfnisse ist damit nicht alles abgedeckt.

Der Parser SynCommons von mORMot ist nicht umsonst > 2 MB in der Größe.
Aber egal war nur ein Vorschlag von mir.

fabi17 16. Jan 2021 20:45

AW: json für Dummies
 
Liste der Anhänge anzeigen (Anzahl: 1)
Lieben Dank für die ganzen Anregungen. Den Ansatz mit mrot finde ich interessant @venice2, ich scheitere aber sowohl bei mrot als auch bei deddys Ansatz an irgendeiner Stelle der Arrays. Ich habe versucht Deddys Beispiel entsprechend anzupassen. Er gibt mir aber keinen Wert zurück...:

Delphi-Quellcode:
 lJSON := TJSONObject.ParseJSONValue(mmo1.Text) as TJSONObject;

    Value := lJSON.Values['entries'];
    if Assigned(Value) and (Value is TJSONArray) then
      begin
        // Das data-Array
        Arr := TJSONArray(Value);
        for i := 0 to Arr.Count - 1 do
          if Arr.Items[i] is TJSONObject then
            begin
              // Die einzelnen Objekte im data-Array
              lInnerJSON := TJSONObject(Arr.Items[i]);
              Value := lInnerJSON.Values['orderitems'];
              if Assigned(Value) and (Value is TJSONArray) then
                begin
                  // Das art-Array je data-Objekt
                  lInnerArr := TJSONArray(Value);
                  for j := 0 to lInnerArr.Count - 1 do
                    if lInnerArr.Items[j] is TJSONObject then
                      begin
                        // Das gesuchte Objekt innerhalb des art-Arrays
                        lArt := TJSONObject(lInnerArr.Items[j]);
                        if not lArt.TryGetValue<string>('id', lID) then
                          lID := '';
                      end;
                end;
            end;
     end;
Ich hab die JSON komplett auch einmal angehängt..

fabi17 16. Jan 2021 22:37

AW: json für Dummies
 
okay ich habe es eben hinbekommen, mit dem Parser von Thomas Erlang. Sehr viel einfacher als die klassischen Möglichkeiten. Dürfte für viele die simpel Parsen wollen die Arbeit erleichtern:

https://github.com/thomaserlang/delphi-json


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:26 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz