Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   JSON Fragen (https://www.delphipraxis.net/216675-json-fragen.html)

rotwildmarcy 11. Feb 2025 07:30

JSON Fragen
 
Guten Morgen zusammen,

ich habe zwei Fragen:

1.
Wenn ich mir mit
Code:
token := Obj.GetValue('access_token').ToString;
den Access-Token abhole, steht der noch in Anführungszeichen, die ich dann noch extra entfernen muss.
Ist das der 'normale' Weg, oder gibt's da was eleganteres, wo das automatisch geht?

2.
Wieso bekomme ich hier einen Fehler in der Typumwandlung inkl Zugriffsverletzung?
Code:
RESTRequest3.Execute;
jsonValue:=RESTResponse3.JSONValue;
//Memo2.Lines.Add(jsonValue.ToString);


  if Assigned(JsonValue) then
  try
    JSonArray := JsonValue as TJSONArray;
    j := 1;
    for i := 0 to JSonArray.Count-1 do
    begin
      JSonObject := JSonArray.Items[i] as TJSonObject;

      description := JSonObject.GetValue('description').Value;
      Beschreibung.Text := description;

     Inc(j);
    end;
  finally
    JsonValue.Free;
   end;
Vielen Dank im voraus für eure Tips!

DeddyH 11. Feb 2025 07:54

AW: JSON Fragen
 
Zu 1: versuch mal mit mit Value statt ToString.
Zu 2: bist Du sicher, dass es ein TJSONArray ist?

Bbommel 11. Feb 2025 08:07

AW: JSON Fragen
 
Zu 1. noch:
Delphi-Quellcode:
token:=obj.GetValue<string>('access_token')

Oder noch etwas schöner:
Delphi-Quellcode:
token:=obj.TryGetValue<string>('access_token','')

Liefert dir das Token oder, falls der Eintrag in deinem JSON nicht vorhanden ist, einen leeren String.

rotwildmarcy 11. Feb 2025 08:24

AW: JSON Fragen
 
Punkt 1 erledigt, vielen Dank!

Zu 2, ja das ist definitv ein Array,
startet mit
Code:
{"data":{"id":"d6f5bd20-e540-11ef-a6d5-4f6ed666ed93","identifier":"v-8017a5bf","product_number":"1402"....

DeddyH 11. Feb 2025 08:31

AW: JSON Fragen
 
Ich sehe da kein Array, wo ist denn die eckige Klammer?
Code:
{"data":[{"bla":"blubb"}, {"bla":"wuppdi"}]}
In diesem Beispiel ist data ein JSON-Array mit 2 Elementen.

rotwildmarcy 11. Feb 2025 08:40

AW: JSON Fragen
 
Sorry, anbei das komplette Teil, anonymisiert. Da in den Unterpunkten eckige Klammern sind, bin ich davon ausgegangen, dass es ein Array ist.


Code:
{
  "data": {
    "id": "dfab3dd0-e540-11ef-8ccd-e97111112517",
    "identifier": "v-e5becf11",
    "product_number": "4601",
    "master_product_number": "1F423-8teGrw0nY8",
    "name": "Repter",
    "description": "ReiS/UK/EU",
    "tags": "Rer",
    "language": "de",
    "locale": "en",
    "properties": {
      "color_group": [
        "White"
      ],
      "country_origin": "China",
      "delivery_time": {
        "min": 35,
        "max": 42
      },
      "finishings": [
        {
          "group": "Printing"
        }
      ],
      "images": [
        {
          "src": "https:jpg"
        },
        {
          "src": "https:jpg"
        },
        {
          "src": "https:jpg"
        }
      ],
      "legal_information": "Henter.",
      "material_group": [
        "ABS)"
      ],
      "minimum_order_amount": 250,
      "price_ranges": [
        {
          "amount": 100,
          "price_ek": 8.68,
          "price_uvp": 11.28
        },
        {
          "amount": 250,
          "price_ek": 8,
          "price_uvp": 10.4
        },
        {
          "amount": 500,
          "price_ek": 7.64,
          "price_uvp": 10.16
        }
      ]
    },
    "groups": [
      {
        "label": "Ela",
        "options": [
          {
            "label": "Eles",
            "value": "03066001"
          }
        ]
      }
    ],
    "created": "2025-02-07 10:47:06",
    "updated": "2025-02-07 10:55:02",
    "selected": true,
    "parent_identifier": "p-5731c03a",
    "available_translations": [
      0,
      1
    ],
    "made_in_europe": false
  }
}

Uwe Raabe 11. Feb 2025 08:45

AW: JSON Fragen
 
Zitat:

Zitat von rotwildmarcy (Beitrag 1546095)
Zu 2, ja das ist definitv ein Array,
startet mit
Code:
{"data":{"id":"d6f5bd20-e540-11ef-a6d5-4f6ed666ed93","identifier":"v-8017a5bf","product_number":"1402"....

Das ist definitiv kein TJsonArray sondern ein TJsonObject mit einem TJsonPair namens data, dessen Value wiederum ein TJsonObject mit diversen pairs ist.

Übrigens: Das RESTResponse3.JSONValue gehört RESTResponse3 und sollte nicht extern freigegeben werden.

Bbommel 11. Feb 2025 08:50

AW: JSON Fragen
 
Was Uwe sagt. :-) Die Frage ist, was du konkret brauchst - wenn du dir nur einen bestimmten Wert rausziehen willst, bist du schnell durch. In deinem ersten Post wolltest du "description" lesen. Dann bist du mit

Delphi-Quellcode:
  description:=JsonValue.TryGetValue<string>('data.description','');

schnell fertig. Wenn du das ganze Ding parsen musst oder alles in ein eigenes Objekt überführen musst, sind andere Wege vielleicht besser. Das kommt dann auf deine Anforderung an.

rotwildmarcy 11. Feb 2025 09:11

AW: JSON Fragen
 
Da ich nur ein paar einzelne Werte brauche, müsste ich mit der schnelle Methode hinkommen.

Code:
 description:=JsonValue.TryGetValue<string>('data.description','');
wirft mir allerdings einen Fehler aus: Es gibt keine überladene Version von TJSONVALue...

Bbommel 11. Feb 2025 10:38

AW: JSON Fragen
 
Hast du eine etwas ältere Delphi-Version? Ich weiß nicht genau, seit wann es diese generischen GetValue und TryGetValue-Methoden im TJSONValue gibt - vielleicht bei dir noch nicht.

Das hier sollte auch tun, ist aber mit den harten Typecasts natürlich nicht so schön und sicher:
Delphi-Quellcode:
TJSONString(TJSONObject(JsonValue).GetValue('data.description')).Value

Genaugenommen müsstest du hier eigentlich prüfen, ob JsonValue überhaupt ein TJSONObject ist und ob die Rückgabe von data.description ein JSONString ist. Aber wie hat mein Info-Prof früher immer so schön geschrieben: diese Aufgabe überlassen wir dem geneigten Leser. ;-)


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:44 Uhr.
Seite 1 von 2  1 2      

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