Problem beim Generieren von JSON

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
aletheamartinez
Beiträge: 1
Registriert: Di 21. Feb 2023, 04:05

Problem beim Generieren von JSON

Beitrag von aletheamartinez »

Habe folgendes Problem, welches ich, auch nach längerer Recherche, nicht lösen konnrw, und hoffe auf Eure Hilfe:

- ich erstelle ein JSON mittels JSONStreamer aus einem TObject
- Felder, welche String-Typen sind, können Umlaute oder Sonderzeichen enthalten
- Diese sind dann im JSON ohne entsprechende Umwandlung auch so darin enthalten
- Beim zurückschreiben kommt dann eine entsprechende Fehlermeldung, sobald Sonderzeichen vorkommen

Code: Alles auswählen

function ObjToJSON(AObject: TObject): string;
var
  Streamer: TJSONStreamer;
begin
  Result := '';
  Streamer := TJSONStreamer.Create(nil);
  try
    Streamer.Options := Streamer.Options + [jsoEnumeratedAsInteger,
      jsoTStringsAsArray, jsoLowerPropertyNames, jsoDateTimeAsString, jsoUseFormatString];
    if not (AObject = nil) then
      Result := Streamer.ObjectToJSONString(AObject);
  finally
    Streamer.Free;
  end;
end;

procedure JSONToObj(AJson: string; AObject: TObject);
var
  Streamer: TJSONDeStreamer;
begin
  Streamer := TJSONDeStreamer.Create(nil);
  try
    if not (AObject = nil) then
    try
      Streamer.Options := Streamer.Options + [jdoCaseInsensitive, jdoIgnorePropertyErrors];
      Streamer.JSONToObject(AJson, AObject);
    except
    end;
  finally
    Streamer.Free;
  end;
end;  
Beispiel-JSON:
{
"abrechnungsweg" : 1,
"email" : "xxx@xxxx",
"fachrichtung" : 0,
"fax" : "xxxxx-xxx",
"fon" : "xxxxx-xxx",
"kvbereich" : "",
"kvnr" : "",
"kzvbereich" : "02",
"kzvnr" : "123456",
"ort" : "Testort",
"plz" : "123456",
"praxisart" : 0,
"praxisname" : "Testpraxis",
"stempelname" : "Testpraxis äÖü",
"strasse" : "Teststrasse",
"url" : "test.de",
"ustid" : "",
"xmlnr" : "34701"
}

Hoffe, dass mir jemand helfen kann.

Benutzeravatar
theo
Beiträge: 10497
Registriert: Mo 11. Sep 2006, 19:01

Re: Problem beim Generieren von JSON

Beitrag von theo »

Kann ich nicht nachvollziehen. Bei mir geht das, wenn ich das kurz mit zwei TEdits teste.
Im Edit1 hat der Text Umlaute.

Code: Alles auswählen

procedure TForm1.Button1Click(Sender: TObject);
var js:String;
begin
  js:=ObjToJSON(Edit1);
  js:=StringReplace(js,'Edit1','Edit2',[rfReplaceAll]); //Name nicht übernehmen
  JSONToObj(js,Edit2);
  Edit2.Top:=Edit1.Top+Edit1.Height+10; //Neu positionieren
end; 
Bei den TJSONDeStreamer Options habe ich noch jdoIgnoreNulls hinzugefügt.

Antworten