Browse Source

* Fixed case when TJSONStringType = WideString.
* Fixed warnings.

git-svn-id: trunk@12438 -

yury 16 years ago
parent
commit
c1f373ee71
1 changed files with 26 additions and 15 deletions
  1. 26 15
      packages/fcl-json/src/fpjson.pp

+ 26 - 15
packages/fcl-json/src/fpjson.pp

@@ -29,6 +29,8 @@ type
   TJSONtype = (jtUnknown, jtNumber, jtString, jtBoolean, jtNull, jtArray, jtObject);
   TJSONFloat = Extended;
   TJSONStringType = AnsiString;
+  TJSONCharType = AnsiChar;
+  PJSONCharType = ^TJSONCharType;
 
   { TJSONData }
 
@@ -61,7 +63,7 @@ type
     Property AsInteger : Integer Read GetAsInteger Write SetAsInteger;
     Property AsBoolean : Boolean Read GetAsBoolean Write SetAsBoolean;
     Property IsNull : Boolean Read GetIsNull;
-    Property AsJSON : String Read GetAsJSON;
+    Property AsJSON : TJSONStringType Read GetAsJSON;
   end;
 
   TJSONDataClass = Class of TJSONData;
@@ -92,7 +94,7 @@ type
     function GetValue: variant; override;
     procedure SetValue(const AValue: variant); override;
   public
-    Constructor Create(AValue : TJSONFloat);
+    Constructor Create(AValue : TJSONFloat); reintroduce;
     class function NumberType : TJSONNumberType; override;
     Procedure Clear;  override;
   end;
@@ -115,7 +117,7 @@ type
     function GetValue: variant; override;
     procedure SetValue(const AValue: variant); override;
   public
-    Constructor Create(AValue : Integer);
+    Constructor Create(AValue : Integer); reintroduce;
     class function NumberType : TJSONNumberType; override;
     Procedure Clear;  override;
   end;
@@ -138,7 +140,7 @@ type
     function GetAsString: TJSONStringType; override;
     procedure SetAsString(const AValue: TJSONStringType); override;
   public
-    Constructor Create(AValue : TJSONStringType);
+    Constructor Create(AValue : TJSONStringType); reintroduce;
     class function JSONType: TJSONType; override;
     Procedure Clear;  override;
   end;
@@ -161,7 +163,7 @@ type
     function GetAsString: TJSONStringType; override;
     procedure SetAsString(const AValue: TJSONStringType); override;
   public
-    Constructor Create(AValue : Boolean);
+    Constructor Create(AValue : Boolean); reintroduce;
     class function JSONType: TJSONType; override;
     Procedure Clear;  override;
   end;
@@ -227,7 +229,7 @@ type
     function GetItem(Index : Integer): TJSONData; override;
     procedure SetItem(Index : Integer; const AValue: TJSONData); override;
   public
-    Constructor Create; overload;
+    Constructor Create; overload; reintroduce;
     Constructor Create(const Elements : Array of Const); overload;
     Destructor Destroy; override;
     class function JSONType: TJSONType; override;
@@ -270,7 +272,7 @@ type
     function GetElements(AName: string): TJSONData;
     function GetFloats(AName : String): TJSONFloat;
     function GetIntegers(AName : String): Integer;
-    function GetIsNull(AName : String): Boolean;
+    function GetIsNull(AName : String): Boolean; reintroduce;
     function GetNameOf(Index : Integer): TJSONStringType;
     function GetObjects(AName : String): TJSONObject;
     function GetStrings(AName : String): TJSONStringType;
@@ -300,7 +302,7 @@ type
     function GetItem(Index : Integer): TJSONData; override;
     procedure SetItem(Index : Integer; const AValue: TJSONData); override;
   public
-    constructor Create;
+    constructor Create; reintroduce;
     Constructor Create(const Elements : Array of Const); overload;
     destructor Destroy; override;
     class function JSONType: TJSONType; override;
@@ -366,17 +368,17 @@ Function StringToJSONString(S : TJSONStringType) : TJSONStringType;
 
 Var
   I,J,L : Integer;
-  P : Pchar;
+  P : PJSONCharType;
 
 begin
   I:=1;
   J:=1;
   Result:='';
   L:=Length(S);
-  P:=PChar(S);
+  P:=PJSONCharType(S);
   While I<=L do
     begin
-    if (P^ in ['"','/','\',#8,#9,#10,#12,#13]) then
+    if (AnsiChar(P^) in ['"','/','\',#8,#9,#10,#12,#13]) then
       begin
       Result:=Result+Copy(S,J,I-J);
       Case P^ of
@@ -401,7 +403,7 @@ Function JSONStringToString(S : TJSONStringType) : TJSONStringType;
 
 Var
   I,J,L : Integer;
-  P : PChar;
+  P : PJSONCharType;
   w : String;
 
 begin
@@ -409,7 +411,7 @@ begin
   J:=1;
   L:=Length(S);
   Result:='';
-  P:=PChar(S);
+  P:=PJSONCharType(S);
   While (I<=L) do
     begin
     if (P^='\') then
@@ -419,7 +421,7 @@ begin
       If (P^<>#0) then
         begin
         Inc(I);
-        Case P^ of
+        Case AnsiChar(P^) of
           '\','"','/'
               : Result:=Result+P^;
           'b' : Result:=Result+#8;
@@ -655,6 +657,7 @@ begin
     Raise EJSON.Create(SErrCannotConvertToNull);
 end;
 
+{$warnings off}
 function TJSONnull.GetAsBoolean: Boolean;
 begin
   ConvertError(True);
@@ -724,6 +727,7 @@ procedure TJSONNull.Clear;
 begin
   // Do nothing
 end;
+{$warnings on}
 
 
 
@@ -959,6 +963,7 @@ begin
     Raise EJSON.Create(SErrCannotConvertToArray);
 end;
 
+{$warnings off}
 function TJSONArray.GetAsBoolean: Boolean;
 begin
   ConvertError(True);
@@ -988,6 +993,7 @@ procedure TJSONArray.SetAsInteger(const AValue: Integer);
 begin
   ConvertError(False);
 end;
+{$warnings on}
 
 function TJSONArray.GetAsJSON: TJSONStringType;
 
@@ -1005,6 +1011,7 @@ begin
   Result:=Result+']';
 end;
 
+{$warnings off}
 function TJSONArray.GetAsString: TJSONStringType;
 begin
   ConvertError(True);
@@ -1024,6 +1031,7 @@ procedure TJSONArray.SetValue(const AValue: variant);
 begin
   ConvertError(False);
 end;
+{$warnings on}
 
 function TJSONArray.GetCount: Integer;
 begin
@@ -1293,6 +1301,7 @@ begin
     Raise EJSON.Create(SErrCannotConvertToObject);
 end;
 
+{$warnings off}
 function TJSONObject.GetAsBoolean: Boolean;
 begin
   ConvertError(True);
@@ -1322,6 +1331,7 @@ procedure TJSONObject.SetAsInteger(const AValue: Integer);
 begin
   ConvertError(False);
 end;
+{$warnings on}
 
 function TJSONObject.GetAsJSON: TJSONStringType;
 
@@ -1342,6 +1352,7 @@ begin
     Result:='{}';
 end;
 
+{$warnings off}
 function TJSONObject.GetAsString: TJSONStringType;
 begin
   ConvertError(True);
@@ -1361,6 +1372,7 @@ procedure TJSONObject.SetValue(const AValue: variant);
 begin
   ConvertError(False);
 end;
+{$warnings on}
 
 function TJSONObject.GetCount: Integer;
 begin
@@ -1388,7 +1400,6 @@ constructor TJSONObject.Create(const Elements: array of const);
 
 Var
   I : integer;
-  F : TJSONFloat;
   AName : String;
   J : TJSONData;