Einzelnen Beitrag anzeigen

DieDolly

Registriert seit: 22. Jun 2018
2.175 Beiträge
 
#6

AW: Textdaten speichern aber in welchem Format

  Alt 2. Okt 2019, 23:56
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;

Geändert von DieDolly ( 3. Okt 2019 um 01:11 Uhr)
  Mit Zitat antworten Zitat