From 88c137abe04fa46814d4f6b7a59d5e85f8ade603 Mon Sep 17 00:00:00 2001 From: michael Date: Tue, 18 Sep 2007 20:07:13 +0000 Subject: * Added parser demo * Removed debug statements from parser code git-svn-id: http://svn.freepascal.org/svn/fpc/trunk@8556 3ad0048d-3df7-0310-abae-a5850022a9f2 --- packages/fcl-json/demo/parsedemo.lpi | 46 +++++++++++++ packages/fcl-json/demo/parsedemo.pp | 123 +++++++++++++++++++++++++++++++++++ packages/fcl-json/src/jsonparser.pp | 2 - 3 files changed, 169 insertions(+), 2 deletions(-) create mode 100644 packages/fcl-json/demo/parsedemo.lpi create mode 100644 packages/fcl-json/demo/parsedemo.pp (limited to 'packages/fcl-json') diff --git a/packages/fcl-json/demo/parsedemo.lpi b/packages/fcl-json/demo/parsedemo.lpi new file mode 100644 index 0000000000..f341e42371 --- /dev/null +++ b/packages/fcl-json/demo/parsedemo.lpi @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packages/fcl-json/demo/parsedemo.pp b/packages/fcl-json/demo/parsedemo.pp new file mode 100644 index 0000000000..19e389f40e --- /dev/null +++ b/packages/fcl-json/demo/parsedemo.pp @@ -0,0 +1,123 @@ +program parsedemo; + +{$mode objfpc}{$H+} + +uses + Classes, SysUtils, fpjson,jsonparser; + +Procedure DoParse(P : TJSONParser); + +Var + J : TJSONData; + +begin + Try + J:=P.Parse; + Try + Writeln('Parse succesful. Dumping JSON data : '); + If Assigned(J) then + begin + Writeln('Returned JSON structure has class : ',J.ClassName); + Writeln(J.AsJSON) + end + else + Writeln('No JSON data available'); + Finally + FreeAndNil(J); + end; + except + On E : Exception do + Writeln('An Exception occurred when parsing : ',E.Message); + end; +end; + + +Procedure ParseFile (FileName : String); + +Var + F : TFileStream; + P : TJSONParser; + +begin + F:=TFileStream.Create(FileName,fmopenRead); + try + // Create parser with Stream as source. + P:=TJSONParser.Create(F); + try + DoParse(P); + finally + FreeAndNil(P); + end; + finally + F.Destroy; + end; +end; + +Procedure ParseString(S : String); + +Var + P : TJSONParser; +begin + // Create parser with Stream as source. + P:=TJSONParser.Create(S); + try + DoParse(P); + finally + FreeAndNil(P); + end; +end; + +Procedure DefaultParsing; + +Const + // From JSON website + SAddr ='{ "addressbook": { "name": "Mary Lebow", '+ + ' "address": {'+ + ' "street": "5 Main Street",'+LineEnding+ + ' "city": "San Diego, CA",'+LineEnding+ + ' "zip": 91912,'+LineEnding+ + ' },'+LineEnding+ + ' "phoneNumbers": [ '+LineEnding+ + ' "619 332-3452",'+LineEnding+ + ' "664 223-4667"'+LineEnding+ + ' ]'+LineEnding+ + ' }'+LineEnding+ + '}'; + + +begin + ParseString(''); + ParseString('NULL'); + ParseString('1'); + ParseString('2.3'); + ParseString('True'); + ParseString('False'); + ParseString('"A string"'); + ParseString('[ Null, False, 1 , 2.3, "a" , { "b" : 1 }]'); + ParseString('{ "a" : 1, "b" : "Something" }'); + ParseString(SAddr); +end; + +Procedure Usage; + +begin + Writeln('Usage : parsedemo arg1 [arg2 [arg3 ...[argN]]]'); + Writeln(' ArgN can be the name of an existing file, or a JSON string'); +end; + +Var + I : Integer; + +begin + If (ParamCount=0) then + DefaultParsing + else if (ParamCount=1) and ((Paramstr(1)='-h') or (ParamStr(1)='--help')) then + Usage + else + For I:=1 to ParamCount do + If FileExists(Paramstr(i)) then + ParseFile(ParamStr(I)) + else + ParseString(Paramstr(I)); +end. + diff --git a/packages/fcl-json/src/jsonparser.pp b/packages/fcl-json/src/jsonparser.pp index 58564e72bb..dcf00df23c 100644 --- a/packages/fcl-json/src/jsonparser.pp +++ b/packages/fcl-json/src/jsonparser.pp @@ -164,7 +164,6 @@ begin T:=GetNextToken; If (T<>tkColon) then DoError(SErrExpectedColon); - Writeln('Getting element'); E:=DoParse(False,False); Result.Add(N,E); T:=GetNextToken; @@ -221,7 +220,6 @@ begin Repeat Result:=FScanner.FetchToken; Until (Result<>tkWhiteSpace); - Writeln('GetNextToken : ',CurrentTokenString); end; Procedure TJSONParser.DoError(Msg : String); -- cgit v1.2.1