Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
76
Task/JSON/Pascal/json.pas
Normal file
76
Task/JSON/Pascal/json.pas
Normal file
|
|
@ -0,0 +1,76 @@
|
|||
program test;
|
||||
{$mode objfpc}{$h+}
|
||||
uses
|
||||
FpJson, JsonParser;
|
||||
|
||||
const
|
||||
JsonValue =
|
||||
'{ ' + LineEnding +
|
||||
' "answer": { ' + LineEnding +
|
||||
' "everything": 42 ' + LineEnding +
|
||||
' }, ' + LineEnding +
|
||||
' "happy": true, ' + LineEnding +
|
||||
' "list": [ ' + LineEnding +
|
||||
' 0, ' + LineEnding +
|
||||
' 1, ' + LineEnding +
|
||||
' 2 ' + LineEnding +
|
||||
' ], ' + LineEnding +
|
||||
' "name": "Pierrot", ' + LineEnding +
|
||||
' "nothing": null, ' + LineEnding +
|
||||
' "object": { ' + LineEnding +
|
||||
' "product": "unknown",' + LineEnding +
|
||||
' "amount": 1001 ' + LineEnding +
|
||||
' }, ' + LineEnding +
|
||||
' "pi": 3.1416 ' + LineEnding +
|
||||
'} ';
|
||||
|
||||
function JsonsEqual(L, R: TJsonData): Boolean;
|
||||
var
|
||||
I: Integer;
|
||||
e: TJsonEnum;
|
||||
d: TJsonData;
|
||||
begin
|
||||
if (L = nil) or (R = nil) then exit(False);
|
||||
if L = R then exit(True);
|
||||
if (L.JSONType <> R.JSONType) or (L.Count <> R.Count) then exit(False);
|
||||
case L.JSONType of
|
||||
jtUnknown: exit(False);
|
||||
jtNull: ;
|
||||
jtBoolean: exit(L.AsBoolean = R.AsBoolean);
|
||||
jtNumber: exit(L.AsFloat = R.AsFloat);
|
||||
jtString: exit(L.AsString = R.AsString);
|
||||
jtArray:
|
||||
for I := 0 to Pred(L.Count) do
|
||||
if not JsonsEqual(L.Items[I], R.Items[I]) then exit(False);
|
||||
jtObject:
|
||||
for e in L do begin
|
||||
if not TJsonObject(R).Find(e.Key, d) then exit(False);
|
||||
if not JsonsEqual(e.Value, d) then exit(False);
|
||||
end;
|
||||
end;
|
||||
Result := True;
|
||||
end;
|
||||
|
||||
var
|
||||
Expected, HandMade: TJsonData;
|
||||
|
||||
begin
|
||||
Expected := GetJson(JsonValue);
|
||||
HandMade := CreateJSONObject([
|
||||
'answer', CreateJSONObject(['everything', 42]),
|
||||
'happy', True,
|
||||
'list', CreateJSONArray([0, 1, 2]),
|
||||
'name', 'Pierrot',
|
||||
'nothing', CreateJSON,
|
||||
'object', CreateJSONObject(['product', 'unknown', 'amount', 1001]),
|
||||
'pi', 3.1416
|
||||
]);
|
||||
WriteLn(HandMade.FormatJson);
|
||||
WriteLn;
|
||||
if JsonsEqual(Expected, HandMade) then
|
||||
WriteLn('Objects look identical')
|
||||
else
|
||||
WriteLn('Oops, something went wrong');
|
||||
Expected.Free;
|
||||
HandMade.Free;
|
||||
end.
|
||||
Loading…
Add table
Add a link
Reference in a new issue