This commit is contained in:
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.
|
||||
Reference in new issue
Block a user