diff --git a/src/ce_common.pas b/src/ce_common.pas index 0dd66683..178b3968 100644 --- a/src/ce_common.pas +++ b/src/ce_common.pas @@ -15,7 +15,8 @@ uses {$IFNDEF CEBUILD} forms, {$ENDIF} - LazFileUtils, process, asyncprocess, ghashmap, ghashset, LCLIntf, strutils; + LazFileUtils, process, asyncprocess, ghashmap, ghashset, LCLIntf, strutils, + xfpjson; const exeExt = {$IFDEF WINDOWS} '.exe' {$ELSE} '' {$ENDIF}; @@ -89,6 +90,12 @@ type function strictText: string; end; + TJSONObjectHelper = class helper for TJSONObject + function findObject(const key: TJSONStringType; out value: TJSONObject): boolean; + function findArray(const key: TJSONStringType; out value: TJSONArray): boolean; + function findAny(const key: TJSONStringType; out value: TJSONData): boolean; + end; + (** * TProcess with assign() 'overriden'. *) @@ -467,6 +474,43 @@ begin setLength(result, result.length - self.LineBreak.length); end; + +function TJSONObjectHelper.findObject(const key: TJSONStringType; out value: TJSONObject): boolean; +var + v: TJSONData; +begin + v := self.Find(key); + if v.isNotNil then + begin + result := v.JSONType = jtObject; + if result then + value := TJSONObject(v); + end + else + result := false; +end; + +function TJSONObjectHelper.findArray(const key: TJSONStringType; out value: TJSONArray): boolean; +var + v: TJSONData; +begin + v := self.Find(key); + if v.isNotNil then + begin + result := v.JSONType = jtArray; + if result then + value := TJSONArray(v); + end + else + result := false; +end; + +function TJSONObjectHelper.findAny(const key: TJSONStringType; out value: TJSONData): boolean; +begin + value := self.Find(key); + result := value.isNotNil; +end; + procedure TProcessEx.Assign(value: TPersistent); var src: TProcess;