Complete BigTask
Sync changed files to Google Drive / sync (push) Successful in 39s

This commit is contained in:
admin_d committed 2026-09-18 16:19:02 +05:00
1 parent 06baad3db6
commit 209018a934
4 files changed
+1100 -2

No files matched your search

@@ -0,0 +1,240 @@
unit KM_IoJSON;
{$I KaM_Remake.inc}
interface
uses
fpjson, jsonparser, KM_CommonClasses;
type
TKMJsonObject = class;
TKMJsonArray = class;
TKMJsonDocument = class
private
fRoot: TKMJsonObject;
public
destructor Destroy; override;
property Root: TKMJsonObject read fRoot;
procedure LoadFromFile(const aFilename: string);
procedure SaveToFile(const aFilename: string; aCompact: Boolean = False);
procedure SaveToStream(aSaveStream: TKMemoryStream; aCompact: Boolean = False);
end;
TKMJsonObject = class
private
fJsonObject: TJsonObject;
function GetArray(const Name: string): TKMJsonArray;
function GetBool(const Name: string): Boolean;
function GetInt(const Name: string): Integer;
function GetObject(const Name: string): TKMJsonObject;
function GetString(const Name: string): string;
procedure SetArray(const Name: string; const Value: TKMJsonArray);
procedure SetBool(const Name: string; const Value: Boolean);
procedure SetInt(const Name: string; const Value: Integer);
procedure SetObject(const Name: string; const Value: TKMJsonObject);
procedure SetString(const Name, Value: string);
public
constructor Create(aJsonObject: TJsonObject);
property JsonObject: TJsonObject read fJsonObject;
function Contains(const Name: string): Boolean;
property S[const Name: string]: string read GetString write SetString;
property I[const Name: string]: Integer read GetInt write SetInt;
property B[const Name: string]: Boolean read GetBool write SetBool;
property A[const Name: string]: TKMJsonArray read GetArray write SetArray;
property O[const Name: string]: TKMJsonObject read GetObject write SetObject;
procedure SaveToStream(aSaveStream: TKMemoryStream; aCompact: Boolean);
procedure SaveToFile(const aFilename: string; aCompact: Boolean);
end;
TKMJsonArray = class
private
fJsonArray: TJsonArray;
function GetArray(Index: Integer): TKMJsonArray;
function GetBool(Index: Integer): Boolean;
function GetInt(Index: Integer): Integer;
function GetObject(Index: Integer): TKMJsonObject;
function GetString(Index: Integer): string;
procedure SetArray(Index: Integer; const Value: TKMJsonArray);
procedure SetBool(Index: Integer; const Value: Boolean);
procedure SetInt(Index: Integer; const Value: Integer);
procedure SetObject(Index: Integer; const Value: TKMJsonObject);
procedure SetString(Index: Integer; const Value: string);
function GetCount: Integer;
public
constructor Create(aJsonArray: TJsonArray);
property JsonArray: TJsonArray read fJsonArray;
property Count: Integer read GetCount;
property S[Index: Integer]: string read GetString write SetString;
property I[Index: Integer]: Integer read GetInt write SetInt;
property B[Index: Integer]: Boolean read GetBool write SetBool;
property A[Index: Integer]: TKMJsonArray read GetArray write SetArray;
property O[Index: Integer]: TKMJsonObject read GetObject write SetObject;
end;
implementation
uses
Classes, SysUtils, jsonscanner, KaMResourceInput;
destructor TKMJsonDocument.Destroy;
begin
FreeAndNil(fRoot);
inherited;
end;
procedure TKMJsonDocument.LoadFromFile(const aFilename: string);
var
S: TStream;
P: TJSONParser;
begin
S := KaMOpenResourceStream(aFilename);
try
{$IFDEF FPC_FULLVERSION >= 30002}
P := TJSONParser.Create(S, []);
{$ELSE}
P := TJSONParser.Create(S);
{$ENDIF}
try
{$IFDEF FPC_FULLVERSION >= 30002}
P.Options := P.Options + [joStrict];
{$ENDIF}
fRoot := TKMJsonObject.Create(P.Parse as TJsonObject);
finally
P.Free;
end;
finally
S.Free;
end;
end;
procedure TKMJsonDocument.SaveToFile(const aFilename: string; aCompact: Boolean = False);
begin
fRoot.SaveToFile(aFilename, aCompact);
end;
procedure TKMJsonDocument.SaveToStream(aSaveStream: TKMemoryStream; aCompact: Boolean = False);
begin
fRoot.SaveToStream(aSaveStream, aCompact);
end;
constructor TKMJsonObject.Create(aJsonObject: TJsonObject);
begin
inherited Create;
fJsonObject := aJsonObject;
end;
function TKMJsonObject.Contains(const Name: string): Boolean;
var
jData: TJsonData;
begin
Result := fJsonObject.Find(Name, jData);
end;
function TKMJsonObject.GetArray(const Name: string): TKMJsonArray;
begin
Result := TKMJsonArray.Create(fJsonObject.Arrays[Name]);
end;
function TKMJsonObject.GetBool(const Name: string): Boolean;
begin
Result := fJsonObject.Get(Name, False);
end;
function TKMJsonObject.GetInt(const Name: string): Integer;
begin
Result := fJsonObject.Get(Name, 0);
end;
function TKMJsonObject.GetObject(const Name: string): TKMJsonObject;
begin
Result := TKMJsonObject.Create(fJsonObject.Objects[Name]);
end;
function TKMJsonObject.GetString(const Name: string): string;
begin
Result := fJsonObject.Get(Name, '');
end;
procedure TKMJsonObject.SetArray(const Name: string; const Value: TKMJsonArray);
begin
end;
procedure TKMJsonObject.SetBool(const Name: string; const Value: Boolean);
begin
end;
procedure TKMJsonObject.SetInt(const Name: string; const Value: Integer);
begin
end;
procedure TKMJsonObject.SetObject(const Name: string; const Value: TKMJsonObject);
begin
end;
procedure TKMJsonObject.SetString(const Name, Value: string);
begin
end;
procedure TKMJsonObject.SaveToFile(const aFilename: string; aCompact: Boolean);
begin
end;
procedure TKMJsonObject.SaveToStream(aSaveStream: TKMemoryStream; aCompact: Boolean);
begin
end;
constructor TKMJsonArray.Create(aJsonArray: TJsonArray);
begin
inherited Create;
fJsonArray := aJsonArray;
end;
function TKMJsonArray.GetCount: Integer;
begin
Result := fJsonArray.Count;
end;
function TKMJsonArray.GetArray(Index: Integer): TKMJsonArray;
begin
Result := TKMJsonArray.Create(fJsonArray.Arrays[Index]);
end;
function TKMJsonArray.GetBool(Index: Integer): Boolean;
begin
Result := fJsonArray.Booleans[Index];
end;
function TKMJsonArray.GetInt(Index: Integer): Integer;
begin
Result := fJsonArray.Integers[Index];
end;
function TKMJsonArray.GetObject(Index: Integer): TKMJsonObject;
begin
Result := TKMJsonObject.Create(fJsonArray.Objects[Index]);
end;
function TKMJsonArray.GetString(Index: Integer): string;
begin
Result := fJsonArray.Strings[Index];
end;
procedure TKMJsonArray.SetArray(Index: Integer; const Value: TKMJsonArray);
begin
end;
procedure TKMJsonArray.SetBool(Index: Integer; const Value: Boolean);
begin
end;
procedure TKMJsonArray.SetInt(Index: Integer; const Value: Integer);
begin
end;
procedure TKMJsonArray.SetObject(Index: Integer; const Value: TKMJsonObject);
begin
end;
procedure TKMJsonArray.SetString(Index: Integer; const Value: string);
begin
end;
end.