fpc/packages/fcl-json/examples/simpledemo.pp
2014-03-29 18:47:48 +00:00

332 lines
8.3 KiB
ObjectPascal

{
This file is part of the Free Component Library
JSON Data structures demo
Copyright (c) 2007 by Michael Van Canneyt michael@freepascal.org
See the file COPYING.FPC, included in this distribution,
for details about the copyright.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
**********************************************************************}
program simpledemo;
{$mode objfpc}{$H+}
uses
Classes, SysUtils, fpjson;
Procedure DumpJSONData(J : TJSonData; DOEOLN : Boolean = True);
Var
I : Integer;
begin
// JSONType property determines kind of value.
Case J.jsontype of
jtNull : Write('Null');
jtBoolean : If J.AsBoolean then
Write('True')
else
Write('False');
jtNumber : {JSONNumber has extra NumberType property
which determines kind of value (int/float).}
Case TJSONNumber(J).NumberType of
ntInteger : Write(J.AsInteger);
ntFloat : Write(J.AsFloat:10:2);
end;
jtString : Write('"',J.AsString,'"');
jtArray : begin
Write('[ ');
For I:=0 to J.Count-1 do
begin
DumpJSONData(J.Items[I],False);
If I<J.Count-1 then
Write(', ');
end;
Write(' ]');
end;
jtObject : begin
Write('{ ');
For I:=0 to J.Count-1 do
begin
Writeln('"',TJSONObject(J).Names[i],'" : ');
DumpJSONData(J.Items[I],False);
If I<J.Count-1 then
Write(',')
end;
Write('}');
end;
end;
If DOEOLN then
Writeln;
end;
Procedure EndTest(Msg : String;J : TJSOnData);
begin
Write(Msg, ' : ');
DumpJSONData(J);
FreeAndNil(J);
end;
Procedure DoTestCreate;
begin
Writeln('Constructor tests');
EndTest('Null value',TJSOnNull.Create);
EndTest('Boolean true',TJSONBoolean.Create(True));
EndTest('Boolean false',TJSONBoolean.Create(False));
EndTest('Integer value',TJSONIntegerNumber.Create(100));
EndTest('Float value',TJSONFloatNumber.Create(1.2e3));
EndTest('String value',TJSONString.Create('Some weird JSON string'));
EndTest('Empty Array value',TJSONArray.Create);
EndTest('Array value from array of const',TJSONArray.Create([1,'a',2,'b']));
EndTest('Empty Object value',TJSONObject.Create);
// Name, Value, name, value
EndTest('Object from array of const',TJSONObject.Create(['a',1,'b',True,'C',Nil]));
end;
Procedure DoTestAs;
Var
J : TJsonData;
begin
Writeln('AsNNN value accessing tests, number with value 123:');
J:=TJSonIntegerNumber.Create(123);
Writeln('IsNull : ',J.IsNull);
Writeln('AsInteger : ',J.AsInteger);
Writeln('AsBoolean : ',J.AsBoolean);
Writeln('AsString : ',J.AsString);
Writeln('AsFloat : ',J.AsFloat:5:3);
FreeAndNil(J);
Writeln('Test IsNull');
J:=TJSonNull.Create;
Writeln('Test for null with IsNull');
Writeln('IsNull : ',J.ISNull);
Writeln('Test number of children :');
Writeln('Count (0) : ',J.Count);
FreeAndNil(J);
J:=TJSONArray.Create(['a','b','c']);
Writeln('Count (3): ',J.Count);
FreeAndNil(J);
J:=TJSONObject.Create(['a',1,'b',2]);
Writeln('Count (2): ',J.Count);
FreeAndNil(J);
end;
Procedure DoTestArray;
Var
J : TJSOnArray;
I : Integer;
begin
Writeln('JSON array with elements 0,1,2,3');
J:=TJSONArray.Create([0,1,2,3]);
Write('Access through Elements[] (default) array property : ');
For I:=0 to J.Count-1 do
begin
Write(J[I].AsString);
If I<J.Count-1 then
Write(', ');
end;
Writeln;
Write('Access through Nulls[] array property : ');
For I:=0 to J.Count-1 do
begin
Write(J.Nulls[I]);
If I<J.Count-1 then
Write(', ');
end;
Writeln;
Write('Access through Booleans[] array property : ');
For I:=0 to J.Count-1 do
begin
Write(J.Booleans[I]);
If I<J.Count-1 then
Write(', ');
end;
Writeln;
Write('Access through Integers[] array property : ');
For I:=0 to J.Count-1 do
begin
Write(J.Integers[I]);
If I<J.Count-1 then
Write(', ');
end;
Writeln;
Write('Access through Floats[] array property : ');
For I:=0 to J.Count-1 do
begin
Write(J.Floats[I]:5:2);
If I<J.Count-1 then
Write(', ');
end;
Writeln;
Write('Access through Strings[] array property : ');
For I:=0 to J.Count-1 do
begin
Write(J.Strings[I]);
If I<J.Count-1 then
Write(', ');
end;
Writeln;
FreeAndNil(J);
Writeln('Create with 3 empty TJSONObjects in array constructor');
Write('Access through Objects[] array property : ');
J:=TJSONArray.Create([TJSOnObject.Create,TJSOnObject.Create,TJSOnObject.Create]);
For I:=0 to J.Count-1 do
begin
DumpJSONData(J.Objects[I],False);
If I<J.Count-1 then
Write(', ');
end;
Writeln;
FreeAndNil(J);
Writeln('Create with 3 empty TJSONArrays in array constructor');
Write('Access through Arrays[] array property : ');
J:=TJSONArray.Create([TJSOnArray.Create,TJSOnArray.Create,TJSOnArray.Create]);
For I:=0 to J.Count-1 do
begin
DumpJSONData(J.Arrays[I],False);
If I<J.Count-1 then
Write(', ');
end;
Writeln;
FreeAndNil(J);
Writeln('Create empty array. Add elements with overloaded Add() method');
J:=TJSONArray.Create;
J.Add; // Null
J.Add(True);
J.Add(False);
J.Add(123);
J.Add(2.34);
J.Add('A string');
J.Add(TJSOnArray.Create);
J.Add(TJSOnObject.Create);
DumpJSONData(J);
FreeAndNil(J);
end;
Procedure DoTestObject;
Var
J : TJSONObject;
I : Char;
k : Integer;
begin
Writeln('JSON object with elements a=0,b=1,c=2,d=3');
J:=TJSONObject.Create(['a',0,'b',1,'c',2,'d',3]);
Write('Get element names with Names[] array property : ');
For K:=1 to J.Count-1 do
begin
Write(J.Names[k]);
If K<J.Count-1 then
Write(', ');
end;
Writeln;
Write('Access through Elements[] (default) array property : ');
For I:='a' to 'd' do
begin
Write(i,' : ',J[I].AsString);
If I<'d' then
Write(', ');
end;
Writeln;
Write('Access through Nulls[] array property : ');
For I:='a' to 'd' do
begin
Write(i,' : ',J.Nulls[I]);
If I<'d' then
Write(', ');
end;
Writeln;
Write('Access through Booleans[] array property : ');
For I:='a' to 'd' do
begin
Write(i,' : ',J.Booleans[I]);
If I<'d' then
Write(', ');
end;
Writeln;
Write('Access through Integers[] array property : ');
For I:='a' to 'd' do
begin
Write(i,' : ',J.Integers[I]);
If I<'d' then
Write(', ');
end;
Writeln;
Write('Access through Floats[] array property : ');
For I:='a' to 'd' do
begin
Write(i,' : ',J.Floats[I]:5:2);
If I<'d' then
Write(', ');
end;
Writeln;
Write('Access through Strings[] array property : ');
For I:='a' to 'd' do
begin
Write(i,' : ',J.Strings[I]);
If I<'d' then
Write(', ');
end;
Writeln;
FreeAndNil(J);
Writeln('Create with 3 empty TJSONObjects in array constructor');
Write('Access through Objects[] array property : ');
J:=TJSONObject.Create(['a',TJSOnObject.Create,'b',TJSOnObject.Create,'c',TJSOnObject.Create]);
For I:='a' to 'c' do
begin
Write(i,' : ');
DumpJSONData(J.Objects[i],False);
If I<'c' then
Write(', ');
end;
Writeln;
FreeAndNil(J);
Writeln('Create with 3 empty TJSONArrays in array constructor');
Write('Access through Arrays[] array property : ');
J:=TJSONObject.Create(['a',TJSONArray.Create,'b',TJSONArray.Create,'c',TJSONArray.Create]);
For I:='a' to 'c' do
begin
Write(i,' : ');
DumpJSONData(J.Arrays[I],False);
If I<'c' then
Write(', ');
end;
Writeln;
FreeAndNil(J);
Writeln('Create empty object. Add elements with overloaded Add() method');
J:=TJSONObject.Create;
J.Add('a'); // Null
J.Add('b',True);
J.Add('c',False);
J.Add('d',123);
J.Add('e',2.34);
J.Add('f','A string');
J.Add('g',TJSONArray.Create);
J.Add('h',TJSOnObject.Create);
DumpJSONData(J);
FreeAndNil(J);
end;
begin
DoTestCreate;
DoTestAs;
DoTestArray;
DoTestObject;
end.