AGB  ·  Datenschutz  ·  Impressum  







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

JSON richtig parsen

Ein Thema von Hobbycoder · begonnen am 23. Mär 2017 · letzter Beitrag vom 25. Mär 2017
 
Der schöne Günther

Registriert seit: 6. Mär 2013
6.202 Beiträge
 
Delphi 10 Seattle Enterprise
 
#7

AW: JSON richtig parsen

  Alt 23. Mär 2017, 17:54
Zu 1)
Ich habe es nicht im Kopf, aber durch Ausprobieren sieht man meine ich dass er weder auf die Nase fällt wenn dein Objekt mehr Felder hat als das Json, noch umgekehrt wenn das Json mehr Felder hat als dein Objekt. Eigentlich ist dir ja klar was du als Json bekommst. Das ist doch ein perfekter Kandidat für Unit-Tests. Sollte sich der Json-Mechanismus in Delphi eines Tages ändern würdest du das mit deinen Tests ja sofort merken wenn dort etwas nicht mehr stimmt

Zu 2)
Enumemerationen sind jetzt etwas kniffelig. Denn in JSON gibt es so etwas nicht. Deine Gegenstelle legt die jetzt als Integer ab sagst du. Hätte man auch als Strings machen können. Ich sehe zwei Möglichkeiten:
  1. Einen eigenen JSON-Interceptor bauen
  2. Die billige Lösung

Der Interceptor würde die Zahl aus deinem Json auswerten können und wieder auf deinen Enum-Typen zurückführen können. Ich finde hier im Forum einmal etwas dazu, bekomme es selbst aber auf die Schnelle nicht mehr hin.

Ich finde es auch in dem Fall einen Overkill. Im Fall Enum/Zahl - ganz ehrlich - Warum nicht einfach die Felder in deinem Objekt auch als Zahl (z.B. Byte) machen und die Getter & Property anpassen? Zu irgend etwas müssen diese Getter ja gut sein


Delphi-Quellcode:
type
   TEMStatus=(emsNeu, emsIB, emsKorr, emsGepr);

   TEMDringlichkeit=(emdLowest, emdLower, emdNormal, emdHigh, emdHighest);

   TErrorMessage = class
      private var
         FStatus:      Byte;
         FDringlichkeit:   Byte;
      private
         function getStatus(): TEMStatus;
         function getDringlicheit: TEMDringlichkeit;
      public
         property Status: TEMStatus read getStatus;
         property Dringlichkeit: TEMDringlichkeit read getDringlicheit;
   end;


implementation

{ TErrorMessage }

function TErrorMessage.getDringlicheit(): TEMDringlichkeit;
begin
   Result := TEMDringlichkeit(FDringlichkeit);
end;

function TErrorMessage.getStatus(): TEMStatus;
begin
   Result := TEMStatus(FStatus);
end;
  Mit Zitat antworten Zitat
 


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 11:21 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