diff --git a/packages/fcl-json/src/jsonconf.pp b/packages/fcl-json/src/jsonconf.pp index 39e2785d1a..ce92b959e4 100644 --- a/packages/fcl-json/src/jsonconf.pp +++ b/packages/fcl-json/src/jsonconf.pp @@ -68,6 +68,8 @@ type protected FJSON: TJSONObject; FModified: Boolean; + Procedure LoadFromFile(Const AFileName : String); + Procedure LoadFromStream(S : TStream); virtual; procedure Loaded; override; function FindPath(Const APath: UnicodeString; AllowCreate : Boolean) : TJSONObject; function FindObject(Const APath: UnicodeString; AllowCreate : Boolean) : TJSONObject; @@ -673,11 +675,6 @@ end; procedure TJSONConfig.DoSetFilename(const AFilename: String; ForceReload: Boolean); -Var - P : TJSONParser; - J : TJSONData; - F : TFileStream; - begin if (not ForceReload) and (FFilename = AFilename) then exit; @@ -685,32 +682,11 @@ begin if csLoading in ComponentState then exit; - Flush; If Not FileExists(AFileName) then Clear else - begin - F:=TFileStream.Create(AFileName,fmopenRead); - try - P:=TJSONParser.Create(F,FJSONOptions); - try - J:=P.Parse; - If (J is TJSONObject) then - begin - FreeAndNil(FJSON); - FJSON:=J as TJSONObject; - FKey:=FJSON; - end - else - Raise EJSONConfigError.CreateFmt(SErrInvalidJSONFile,[AFileName]); - finally - P.Free; - end; - finally - F.Free; - end; - end; + LoadFromFile(AFileName); end; procedure TJSONConfig.SetFilename(const AFilename: String); @@ -741,6 +717,46 @@ begin Result:=P; end; +procedure TJSONConfig.LoadFromFile(const AFileName: String); + +Var + F : TFileStream; + +begin + F:=TFileStream.Create(AFileName,fmopenRead); + try + LoadFromStream(F); + finally + F.Free; + end; +end; + +procedure TJSONConfig.LoadFromStream(S: TStream); + +Var + P : TJSONParser; + J : TJSONData; + +begin + P:=TJSONParser.Create(S,FJSONOptions); + try + J:=P.Parse; + If (J is TJSONObject) then + begin + FreeAndNil(FJSON); + FJSON:=J as TJSONObject; + FKey:=FJSON; + end + else + begin + FreeAndNil(J); + Raise EJSONConfigError.CreateFmt(SErrInvalidJSONFile,[FileName]); + end; + finally + P.Free; + end; +end; + procedure TJSONConfig.CloseKey; begin