Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   JSON: Abstrakter Fehler (https://www.delphipraxis.net/182383-json-abstrakter-fehler.html)

ByTheTime 20. Okt 2014 17:23

JSON: Abstrakter Fehler
 
Hallo,
ich habe gerade zum ersten mal ein bisschen mit JSON experimentiert. Leider komme ich an einer Stelle nicht weiter:

Delphi-Quellcode:
class function TConfigurationSettingsHandler.LoadSettings
  : TConfigurationSettings;
var
  Strings: TStrings;
begin
  Strings := TStrings.Create();
  if FileExists(ParamStr(0) + '.json') then
  begin
    Strings.LoadFromFile(ParamStr(0) + '.json'); // Abstrakter Fehler!
    Result := TJson.JsonToObject<TConfigurationSettings>(Strings.Text);
  end
  else
    Result := TConfigurationSettings.Create();
  Strings.Free;
end;

class procedure TConfigurationSettingsHandler.SaveSettings
  (Settings: TConfigurationSettings; FilePath: String);
var
  Strings: TStrings;
begin
  if FilePath = '' then
    FilePath := ParamStr(0) + '.json';

  Strings := TStrings.Create();
  Strings.Add(TJson.ObjectToJsonString(Settings)); // Abstrakter Fehler!
  Strings.SaveToFile(FilePath);
  Strings.Free;
end;
In den beiden markierten Zeilen erhalte ich einen abstrakten Fehler. Allerdings kann ich dort kein Problem erkennen.

MfG

Sir Rufo 20. Okt 2014 17:29

AW: JSON: Abstrakter Fehler
 
Kuckst du Doku Delphi-Referenz durchsuchenTStrings.Create ;)

mjustin 20. Okt 2014 17:36

AW: JSON: Abstrakter Fehler
 
Der Delphi Compiler wird eine Warnung ausgegeben haben, die auf den Fehler hinweist. 'Leider' ist es nur eine Warnung, die man leicht übersieht. In neueren Delphi Versionen ist es aber mittlerweile möglich, den Compiler zur Ausgabe einer Fehlermeldung (und dem Abbrechen des Kompilierens) zu bringen. Wie es geht wird hier beschrieben:

Delphi 2010 compiler warning about instantiation of abstract class should be a compiler error

ByTheTime 20. Okt 2014 18:00

AW: JSON: Abstrakter Fehler
 
Okay, danke. Jetzt hab ich es verstanden und es läuft :thumb:

Aber noch eine kleine Frage nebenbei: Ich kann anscheinend keinen Pfad mit JSON speichern. Sobald ich das mache, bzw. eine von Hand editierte Datei die einen Pfad (C:\Temp) enthält, mit meinem Programm lade, erhalte ich sofort eine Zugriffsverletzung in der Zeile von der TJson Komponente :(

Sir Rufo 20. Okt 2014 19:50

AW: JSON: Abstrakter Fehler
 
Natürlich geht das, kuckst du Doku http://json.org (dafür sind die da)

ByTheTime 20. Okt 2014 22:27

AW: JSON: Abstrakter Fehler
 
Anscheinend geht es nicht, guckst du hier :P Bild von der Website.

"Any UNICODE character except " or \ or control character".

Aber jetzt weiß ich ja das es nciht geht, also heißt das wohl: StringReplace :thumb:

Sir Rufo 20. Okt 2014 22:39

AW: JSON: Abstrakter Fehler
 
Zitat:

Zitat von ByTheTime (Beitrag 1276761)
Anscheinend geht es nicht, guckst du hier :P Bild von der Website.

"Any UNICODE character except " or \ or control character".

Aber jetzt weiß ich ja das es nciht geht, also heißt das wohl: StringReplace :thumb:

Genau das Bild meinte ich, aber du scheinst es nicht richtig interpretiert zu haben.
Code:
{"path": "C:\\mypath\\subpath\\"}
Ergibt als Wert für
Delphi-Quellcode:
path
Delphi-Quellcode:
'C:\mypath\subpath\'
Code:
{
  "quotation": "\"",
  "backslash": "\\",
  "slash": "\/",
  "backspace": "\b",
  "formfeed": "\f",
  "newline": "\n",
  "carrige return": "\r",
  "horizontal tab": "\t",
  "two lines": "line 1\r\nline 2"
}
Ich hoffe jetzt ist es klarer ;)

ByTheTime 20. Okt 2014 22:59

AW: JSON: Abstrakter Fehler
 
Ah danke für die Erklärung, jetzt hat es klick gemacht! :thumb::thumb::thumb:

Ich habe auch meinen Fehler gefunden. Ich habe die JSON im Editor geöffnet und an die entsprechende Stelle C:\Temp\Test.exe geschrieben. Das geht natürlich schief :stupid: Und dann habe ich das irgendwie nicht ganz gepeilt und wohl darauf geschlossen das JSON kein \ mag :wall: Wenn ich in meiner Anwendung aber ein ganz normalen Pfad meiner Klasse übergebe, klappt natürlich alles.

Danke!


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:54 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