AGB  ·  Datenschutz  ·  Impressum  







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

JSON in Delphi

Ein Thema von Incocnito · begonnen am 24. Apr 2020 · letzter Beitrag vom 27. Apr 2020
Antwort Antwort
Benutzerbild von DeddyH
DeddyH

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

AW: JSON in Delphi

  Alt 24. Apr 2020, 15:00
Da mir dieses ganze Marshalling in Delphi immer etwas suspekt ist, mache ich sowas von Hand.
Delphi-Quellcode:
uses ..., System.JSON;

type
  TLinks = class
  private
    FStart: string;
    Fxxx: string;
    Fzzz: string;
  public
    class function FromJSON(const Obj: TJSONObject): TLinks; overload; static;
    class function FromJSON(const ObjStr: string): TLinks; overload; static;
    property Start: string read FStart write FStart;
    property xxx: string read Fxxx write Fxxx;
    property zzz: string read Fzzz write Fzzz;
  end;

...

class function TLinks.FromJSON(const Obj: TJSONObject): TLinks;
var
  Value: TJSONValue;
  lObj: TJSONObject;
  Dummy: string;
begin
  Result := nil;
  if Assigned(Obj) then
    begin
      Value := Obj.Values['links'];
      if Assigned(Value) and (Value is TJSONObject) then
        begin
          lObj := TJSONObject(Value);
          Result := TLinks.Create;
          if lObj.TryGetValue<string>('start', Dummy) then
            Result.Start := Dummy;
          if lObj.TryGetValue<string>('xxx', Dummy) then
            Result.xxx := Dummy;
          if lObj.TryGetValue<string>('zzz', Dummy) then
            Result.zzz := Dummy;
        end;
    end;
end;

class function TLinks.FromJSON(const ObjStr: string): TLinks;
var
  Obj: TJSONObject;
begin
  Obj := TJSONObject.ParseJSONValue(ObjStr) as TJSONObject;
  try
    Result := TLinks.FromJSON(Obj);
  finally
    Obj.Free;
  end;
end;
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
Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: JSON in Delphi

  Alt 24. Apr 2020, 17:03
Welche Delphi Version benutzt du denn? Bei mir (10.3.3) ist das eine andere Zeilennummer und da steht:
Delphi-Quellcode:
          rField := GetFieldType(Data, FieldName);
          // Unmarshal TList<T>.FListHelper as dynamic array using 10.2 layout
          if (rField <> nil) and
             (rField.FieldType.Handle = TypeInfo(System.Generics.Collections.TListHelper)) and
Damit sollte der Fehler nicht auftauchen.
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Incocnito

Registriert seit: 28. Nov 2016
237 Beiträge
 
#3

AW: JSON in Delphi

  Alt 27. Apr 2020, 06:52
Da mir dieses ganze Marshalling in Delphi immer etwas suspekt ist, mache ich sowas von Hand....
Dein Ernst? Bei den ganzen Json, die wir nutzen wären wir ewig zu gange das alles auch noch von Hand zu machen!

Welche Delphi Version benutzt du denn? Bei mir (10.3.3) ist das eine andere Zeilennummer und da steht:
Delphi-Quellcode:
          rField := GetFieldType(Data, FieldName);
          // Unmarshal TList<T>.FListHelper as dynamic array using 10.2 layout
          if (rField <> nil) and
             (rField.FieldType.Handle = TypeInfo(System.Generics.Collections.TListHelper)) and
Damit sollte der Fehler nicht auftauchen.
Was soll ich sagen: 10.3.2 ... dann ist das wohl ein Delphi-Bug, den die selbst schon behoben haben, ja?
Dann heißt es mal wieder: auf zum nächsten Update!

Danke für die Hilfe!
Liebe Grüße
Incocnito
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

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

AW: JSON in Delphi

  Alt 27. Apr 2020, 07:49
Was soll ich sagen: 10.3.2 ... dann ist das wohl ein Delphi-Bug, den die selbst schon behoben haben, ja?
Access violation in TJSONUnMarshal.PopulateFields if array does not exist in target object
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.826 Beiträge
 
Delphi 12 Athens
 
#5

AW: JSON in Delphi

  Alt 27. Apr 2020, 14:17
Da mir dieses ganze Marshalling in Delphi immer etwas suspekt ist, mache ich sowas von Hand....
Dein Ernst? Bei den ganzen Json, die wir nutzen wären wir ewig zu gange das alles auch noch von Hand zu machen!
Das dauert weniger lange als Du denkst, wenn man zwei Punkte beachtet: man unterstützt zunächst kein Allerwelts-JSON, sondern ein sehr spezielles von einem Anbieter. Wenn man das erweiterbar implementiert, ist man sehr zügig mit weiteren Anbietern durch.

Sherlock
Oliver
Geändert von Sherlock (Morgen um 16:78 Uhr) Grund: Weil ich es kann
  Mit Zitat antworten Zitat
Antwort Antwort


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 14:36 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-2025 by Thomas Breitkreuz