mirror of
https://gitlab.com/freepascal.org/fpc/source.git
synced 2025-09-07 15:10:40 +02:00
* Patch from BBaz to add an overload to find returning a boolean (bug ID
git-svn-id: trunk@35343 -
This commit is contained in:
parent
2265312872
commit
1a771735ac
@ -537,6 +537,12 @@ Type
|
||||
Function IndexOfName(const AName: TJSONStringType; CaseInsensitive : Boolean = False): Integer;
|
||||
Function Find(Const AName : String) : TJSONData; overload;
|
||||
Function Find(Const AName : String; AType : TJSONType) : TJSONData; overload;
|
||||
function Find(const key: TJSONStringType; out AValue: TJSONData): boolean;
|
||||
function Find(const key: TJSONStringType; out AValue: TJSONObject): boolean;
|
||||
function Find(const key: TJSONStringType; out AValue: TJSONArray): boolean;
|
||||
function Find(const key: TJSONStringType; out AValue: TJSONString): boolean;
|
||||
function Find(const key: TJSONStringType; out AValue: TJSONBoolean): boolean;
|
||||
function Find(const key: TJSONStringType; out AValue: TJSONNumber): boolean;
|
||||
Function Get(Const AName : String) : Variant;
|
||||
Function Get(Const AName : String; ADefault : TJSONFloat) : TJSONFloat;
|
||||
Function Get(Const AName : String; ADefault : Integer) : Integer;
|
||||
@ -3155,6 +3161,87 @@ begin
|
||||
Result:=Nil;
|
||||
end;
|
||||
|
||||
function TJSONObject.Find(const key: TJSONStringType; out AValue: TJSONData): boolean;
|
||||
begin
|
||||
AValue := Find(key);
|
||||
result := assigned(AValue);
|
||||
end;
|
||||
|
||||
function TJSONObject.Find(const key: TJSONStringType; out AValue: TJSONObject): boolean;
|
||||
var
|
||||
v: TJSONData;
|
||||
begin
|
||||
v := Find(key);
|
||||
if assigned(v) then
|
||||
begin
|
||||
result := v.JSONType = jtObject;
|
||||
if result then
|
||||
AValue := TJSONObject(v);
|
||||
end
|
||||
else
|
||||
result := false;
|
||||
end;
|
||||
|
||||
function TJSONObject.Find(const key: TJSONStringType; out AValue: TJSONArray): boolean;
|
||||
var
|
||||
v: TJSONData;
|
||||
begin
|
||||
v := Find(key);
|
||||
if assigned(v) then
|
||||
begin
|
||||
result := v.JSONType = jtArray;
|
||||
if result then
|
||||
AValue := TJSONArray(v);
|
||||
end
|
||||
else
|
||||
result := false;
|
||||
end;
|
||||
|
||||
function TJSONObject.Find(const key: TJSONStringType; out AValue: TJSONString): boolean;
|
||||
var
|
||||
v: TJSONData;
|
||||
begin
|
||||
v := Find(key);
|
||||
if assigned(v) then
|
||||
begin
|
||||
result := v.JSONType = jtString;
|
||||
if result then
|
||||
AValue := TJSONString(v);
|
||||
end
|
||||
else
|
||||
result := false;
|
||||
end;
|
||||
|
||||
function TJSONObject.Find(const key: TJSONStringType; out AValue: TJSONBoolean): boolean;
|
||||
var
|
||||
v: TJSONData;
|
||||
begin
|
||||
v := Find(key);
|
||||
if assigned(v) then
|
||||
begin
|
||||
result := v.JSONType = jtBoolean;
|
||||
if result then
|
||||
AValue := TJSONBoolean(v);
|
||||
end
|
||||
else
|
||||
result := false;
|
||||
end;
|
||||
|
||||
function TJSONObject.Find(const key: TJSONStringType; out AValue: TJSONNumber): boolean;
|
||||
var
|
||||
v: TJSONData;
|
||||
begin
|
||||
v := Find(key);
|
||||
if assigned(v) then
|
||||
begin
|
||||
result := v.JSONType = jtNumber;
|
||||
if result then
|
||||
AValue := TJSONNumber(v);
|
||||
end
|
||||
else
|
||||
result := false;
|
||||
end;
|
||||
|
||||
initialization
|
||||
// Need to force initialization;
|
||||
TJSONData.DetermineElementSeparators;
|
||||
|
@ -256,6 +256,7 @@ type
|
||||
Procedure TestFormat;
|
||||
Procedure TestFormatNil;
|
||||
Procedure TestFind;
|
||||
Procedure TestIfFind;
|
||||
end;
|
||||
|
||||
{ TTestJSONPath }
|
||||
@ -3553,6 +3554,28 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
Procedure TTestObject.TestIfFind;
|
||||
Var
|
||||
J: TJSONObject;
|
||||
B: TJSONBoolean;
|
||||
S: TJSONString;
|
||||
N: TJSONNumber;
|
||||
D: TJSONData;
|
||||
begin
|
||||
J:=TJSONObject.Create(['s', 'astring', 'b', true, 'n', 1]);
|
||||
try
|
||||
TestJSONType(J,jtObject);
|
||||
TestIsNull(J,False);
|
||||
TestItemCount(J,3);
|
||||
AssertEquals('boolean found', true, j.Find('b', B));
|
||||
AssertEquals('string found', true, j.Find('s', S));
|
||||
AssertEquals('number found', true, j.Find('n', N));
|
||||
AssertEquals('data found', true, j.Find('s', D));
|
||||
finally
|
||||
FreeAndNil(J);
|
||||
end;
|
||||
end;
|
||||
|
||||
|
||||
procedure TTestObject.TestCreateString;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user