Kann Delphi mitlerweile nicht sogar JSON von Haus aus? Ich finde dazu zwar etwas auf den offiziellen Seiten aber keine vernünftigen Beispiele.
Auf die schnelle würde ich das so machen
Delphi-Quellcode:
procedure TForm1.Button9Click(Sender: TObject);
var
ArrayName, ObjectData, JSONObject: TJSONObject;
JSONArray: TJSONArray;
begin
try
ObjectData := TJSONObject.Create;
ObjectData.AddPair('name', 'red');
ObjectData.AddPair('hex', '#f00');
JSONArray := TJSONArray.Create;
JSONArray.Add(ObjectData);
JSONObject := TJSONObject.Create;
JSONObject.AddPair('colors', JSONArray);
... JSONObject.ToJSON
finally
JSONObject.Free;
end;
end;
(
http://docwiki.embarcadero.com/RADStudio/Rio/de/JSON)
Würdet ihr sowas dann alles in eine Datei packen oder in mehrere? Ein so ein Json-Objekt könnte etwas größer werden und ich habe nicht die Möglichkeit denen einen Titel zu geben wie bei Ini. Das hier ist ein kompletter Beispieldatensatz. Namen verändert zu a, b usw.
Code:
{
"datetime": "2019-10-03T01:28:44.995Z",
"data": {
"a": "32,97",
"b": "64,12",
"c": "28,35",
"d": "64",
"e": "250",
"f": "hier könnte eine etwas längere info stehen. bis zu 100 zeichen vielleicht?"
},
"personaldata": {
"a": "34",
"b": "72,9",
"c": "125",
"d": "110",
"e": "hier könnte eine etwas längere info stehen. bis zu 100 zeichen vielleicht?"
}
}
Beim Ändern eines Datensatzes bin ich jetzt aber aufgeschmissen und brauche Hilfe. Denn ich weiß nicht, ob das alles so richtig ist.
Delphi-Quellcode:
// Helfer
procedure ChangeJSONValue(ArrayName, ObjectName, NewValue: string; var JSONValue: TJSONValue; JSONObject: TJSONObject);
var
JSONPair: TJSONPair;
begin
JSONPair := JSONObject.GetValue<TJSONObject>(ArrayName).Get(ObjectName);
JSONPair.JSONValue := TJSONString.Create(NewValue);
end;
function GetJSONValue(ArrayName, ObjectName: string; var JSONValue: TJSONValue; JSONObject: TJSONObject): string;
var
JSONPair: TJSONPair;
begin
JSONPair := JSONObject.GetValue<TJSONObject>(ArrayName).Get(ObjectName);
Result := JSONPair.JSONValue.Value;
end;
// Den Wert in der JSON-Datei ändern
procedure TForm1.Button10Click(Sender: TObject);
var
JSONValue: TJSONValue;
JSONObject: TJSONObject;
begin
JSONValue := TJSONObject.ParseJSONValue(TFile.ReadAllText('JSONTest.json'));
try
JSONObject := JSONValue as TJSONObject;
ChangeJSONValue('data', 'a', '456', JSONValue, JSONObject);
... JSONObject.ToJSON
finally
JSONValue.Free;
end;
end;
procedure TForm1.Button11Click(Sender: TObject);
var
JSONValue: TJSONValue;
begin
JSONValue := TJSONObject.ParseJSONValue(TFile.ReadAllText('JSONTest.json'));
try
ShowMessage('value of a is: ' + GetJSONValue('data', 'a', JSONValue, JSONValue as TJSONObject));
finally
JSONValue.Free;
end;
end;