AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

JSON Fragen

Ein Thema von rotwildmarcy · begonnen am 11. Feb 2025 · letzter Beitrag vom 11. Feb 2025
Antwort Antwort
Seite 1 von 2  1 2      
rotwildmarcy

Registriert seit: 14. Feb 2007
25 Beiträge
 
#1

JSON Fragen

  Alt 11. Feb 2025, 08:30
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!
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.653 Beiträge
 
Delphi 12 Athens
 
#2

AW: JSON Fragen

  Alt 11. Feb 2025, 08:54
Zu 1: versuch mal mit mit Value statt ToString.
Zu 2: bist Du sicher, dass es ein TJSONArray ist?
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Bbommel

Registriert seit: 27. Jun 2007
Ort: Köln
664 Beiträge
 
Delphi 12 Athens
 
#3

AW: JSON Fragen

  Alt 11. Feb 2025, 09:07
Zu 1. noch:
token:=obj.GetValue<string>('access_token')
Oder noch etwas schöner:
token:=obj.TryGetValue<string>('access_token','')
Liefert dir das Token oder, falls der Eintrag in deinem JSON nicht vorhanden ist, einen leeren String.
  Mit Zitat antworten Zitat
rotwildmarcy

Registriert seit: 14. Feb 2007
25 Beiträge
 
#4

AW: JSON Fragen

  Alt 11. Feb 2025, 09:24
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"....
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.653 Beiträge
 
Delphi 12 Athens
 
#5

AW: JSON Fragen

  Alt 11. Feb 2025, 09:31
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.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
rotwildmarcy

Registriert seit: 14. Feb 2007
25 Beiträge
 
#6

AW: JSON Fragen

  Alt 11. Feb 2025, 09:40
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
  }
}
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.575 Beiträge
 
Delphi 12 Athens
 
#7

AW: JSON Fragen

  Alt 11. Feb 2025, 09:45
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.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Bbommel

Registriert seit: 27. Jun 2007
Ort: Köln
664 Beiträge
 
Delphi 12 Athens
 
#8

AW: JSON Fragen

  Alt 11. Feb 2025, 09:50
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

  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.
  Mit Zitat antworten Zitat
rotwildmarcy

Registriert seit: 14. Feb 2007
25 Beiträge
 
#9

AW: JSON Fragen

  Alt 11. Feb 2025, 10:11
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...
  Mit Zitat antworten Zitat
Bbommel

Registriert seit: 27. Jun 2007
Ort: Köln
664 Beiträge
 
Delphi 12 Athens
 
#10

AW: JSON Fragen

  Alt 11. Feb 2025, 11:38
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:
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.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:32 Uhr.
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 by Thomas Breitkreuz