|
@@ -46,14 +46,14 @@ Type
|
|
|
private
|
|
|
FParent : TPCJSONData;
|
|
|
protected
|
|
|
- Function ToJSONFormatted(pretty:Boolean;Const prefix : AnsiString) : AnsiString; virtual; abstract;
|
|
|
+ Function ToJSONFormatted(pretty:Boolean;Const prefix : String) : String; virtual; abstract;
|
|
|
public
|
|
|
Constructor Create; virtual;
|
|
|
Destructor Destroy; override;
|
|
|
Class Function ParseJSONValue(Const JSONObject : String) : TPCJSONData; overload;
|
|
|
Class Function ParseJSONValue(Const JSONObject : TBytes) : TPCJSONData; overload;
|
|
|
Class Function _GetCount : Integer;
|
|
|
- Function ToJSON(pretty : Boolean) : AnsiString;
|
|
|
+ Function ToJSON(pretty : Boolean) : String;
|
|
|
Procedure SaveToStream(Stream : TStream);
|
|
|
Procedure Assign(PCJSONData : TPCJSONData);
|
|
|
End;
|
|
@@ -69,7 +69,7 @@ Type
|
|
|
FValue: Variant;
|
|
|
procedure SetValue(const Value: Variant);
|
|
|
protected
|
|
|
- Function ToJSONFormatted(pretty:Boolean;const prefix : AnsiString) : AnsiString; override;
|
|
|
+ Function ToJSONFormatted(pretty:Boolean;const prefix : String) : String; override;
|
|
|
public
|
|
|
Constructor Create; override;
|
|
|
Constructor CreateFromJSONValue(JSONValue : TJSONValue);
|
|
@@ -92,7 +92,7 @@ Type
|
|
|
FFreeValue : Boolean;
|
|
|
procedure SetValue(const Value: TPCJSONData);
|
|
|
protected
|
|
|
- Function ToJSONFormatted(pretty:Boolean;const prefix : AnsiString) : AnsiString; override;
|
|
|
+ Function ToJSONFormatted(pretty:Boolean;const prefix : String) : String; override;
|
|
|
public
|
|
|
Constructor Create(AName : String);
|
|
|
Destructor Destroy; override;
|
|
@@ -128,7 +128,7 @@ Type
|
|
|
Procedure GrowToIndex(index : Integer);
|
|
|
function GetItemOfType(Index: Integer; DataClass:TPCJSONDataClass): TPCJSONData;
|
|
|
protected
|
|
|
- Function ToJSONFormatted(pretty:Boolean;const prefix : AnsiString) : AnsiString; override;
|
|
|
+ Function ToJSONFormatted(pretty:Boolean;const prefix : String) : String; override;
|
|
|
public
|
|
|
Constructor Create; override;
|
|
|
Constructor CreateFromJSONArray(JSONArray : TJSONArray);
|
|
@@ -145,7 +145,7 @@ Type
|
|
|
Function GetIndexOrCreateName(Name : String) : Integer;
|
|
|
Function GetByName(Name : String) : TPCJSONNameValue;
|
|
|
protected
|
|
|
- Function ToJSONFormatted(pretty:Boolean;const prefix : AnsiString) : AnsiString; override;
|
|
|
+ Function ToJSONFormatted(pretty:Boolean;const prefix : String) : String; override;
|
|
|
Procedure CheckCanInsert(Index:Integer; PCJSONData:TPCJSONData); override;
|
|
|
Procedure CheckValidName(Name : String);
|
|
|
public
|
|
@@ -178,30 +178,30 @@ Type
|
|
|
implementation
|
|
|
|
|
|
Function UTF8JSONEncode(plainTxt : String; includeSeparator : Boolean) : String;
|
|
|
-Var ws : WideString;
|
|
|
+Var ws : String;
|
|
|
i : Integer;
|
|
|
Begin
|
|
|
ws := UTF8Encode(plainTxt);
|
|
|
{ALERT:
|
|
|
UTF8Encode function deletes last char if equal to #0, so we put it manually
|
|
|
}
|
|
|
- if copy(plainTxt,length(plainTxt),1)=#0 then ws := ws + #0;
|
|
|
- i := 1;
|
|
|
+ if plainTxt.Substring(Length(plainTxt)-1,1)=#0 then ws := ws + #0;
|
|
|
+ i := 0;
|
|
|
result := '"';
|
|
|
- while i <= length(ws) do
|
|
|
+ while i < Length(ws) do
|
|
|
begin
|
|
|
- case ws[i] of
|
|
|
- '/', '\', '"': result := result + '\' + ws[i];
|
|
|
+ case ws.Chars[i] of
|
|
|
+ '/', '\', '"': result := result + '\' + ws.Chars[i];
|
|
|
#8: result := result + '\b';
|
|
|
#9: result := result + '\t';
|
|
|
#10: result := result + '\n';
|
|
|
#13: result := result + '\r';
|
|
|
#12: result := result + '\f';
|
|
|
else
|
|
|
- if (ord(ws[i]) < 32) Or (ord(ws[i])>122) then
|
|
|
- result := result + '\u' + inttohex(ord(ws[i]), 4)
|
|
|
+ if (ord(ws.Chars[i]) < 32) Or (ord(ws.Chars[i])>122) then
|
|
|
+ result := result + '\u' + inttohex(ord(ws.Chars[i]), 4)
|
|
|
else
|
|
|
- result := result + ws[i];
|
|
|
+ result := result + ws.Chars[i];
|
|
|
end;
|
|
|
inc(i);
|
|
|
end;
|
|
@@ -283,7 +283,7 @@ begin
|
|
|
While (index>=Count) do Insert(Count,TPCJSONVariantValue.Create);
|
|
|
end;
|
|
|
|
|
|
-function TPCJSONArray.ToJSONFormatted(pretty: Boolean; const prefix: AnsiString): AnsiString;
|
|
|
+function TPCJSONArray.ToJSONFormatted(pretty: Boolean; const prefix: String): String;
|
|
|
Var i : Integer;
|
|
|
begin
|
|
|
If pretty then Result := prefix+'['
|
|
@@ -535,7 +535,7 @@ begin
|
|
|
FValue := Value;
|
|
|
end;
|
|
|
|
|
|
-function TPCJSONVariantValue.ToJSONFormatted(pretty: Boolean; const prefix: AnsiString): AnsiString;
|
|
|
+function TPCJSONVariantValue.ToJSONFormatted(pretty: Boolean; const prefix: String): String;
|
|
|
Var ds,ts : Char;
|
|
|
begin
|
|
|
Case VarType(Value) of
|
|
@@ -873,21 +873,21 @@ begin
|
|
|
end;
|
|
|
|
|
|
function TPCJSONObject.LoadAsStream(ParamName: String; Stream: TStream): Integer;
|
|
|
-Var s : AnsiString;
|
|
|
+Var s : RawByteString;
|
|
|
begin
|
|
|
s := AsString(ParamName,'');
|
|
|
if (s<>'') then begin
|
|
|
- Stream.Write(s[1],length(s));
|
|
|
+ Stream.Write(s[Low(s)],length(s));
|
|
|
end;
|
|
|
Result := Length(s);
|
|
|
end;
|
|
|
|
|
|
function TPCJSONObject.SaveAsStream(ParamName: String; Stream: TStream): Integer;
|
|
|
-Var s : AnsiString;
|
|
|
+Var s : RawByteString;
|
|
|
begin
|
|
|
Stream.Position := 0;
|
|
|
SetLength(s,Stream.Size);
|
|
|
- Stream.Read(s[1],Stream.Size);
|
|
|
+ Stream.Read(s[Low(s)],Stream.Size);
|
|
|
GetAsVariant(ParamName).Value := s;
|
|
|
end;
|
|
|
|
|
@@ -903,7 +903,7 @@ begin
|
|
|
NV.FFreeValue := false;
|
|
|
end;
|
|
|
|
|
|
-function TPCJSONObject.ToJSONFormatted(pretty: Boolean; const prefix: AnsiString): AnsiString;
|
|
|
+function TPCJSONObject.ToJSONFormatted(pretty: Boolean; const prefix: String): String;
|
|
|
Var i : Integer;
|
|
|
begin
|
|
|
if pretty then Result := prefix+'{'
|
|
@@ -944,7 +944,7 @@ begin
|
|
|
FFreeValue := true;
|
|
|
end;
|
|
|
|
|
|
-function TPCJSONNameValue.ToJSONFormatted(pretty: Boolean; const prefix: AnsiString): AnsiString;
|
|
|
+function TPCJSONNameValue.ToJSONFormatted(pretty: Boolean; const prefix: String): String;
|
|
|
begin
|
|
|
if pretty then Result := prefix else Result := '';
|
|
|
Result := Result + UTF8JSONEncode(name,true)+':'+Value.ToJSONFormatted(pretty,prefix+' ');
|
|
@@ -958,7 +958,7 @@ procedure TPCJSONData.Assign(PCJSONData: TPCJSONData);
|
|
|
Var i : Integer;
|
|
|
NV : TPCJSONNameValue;
|
|
|
JSOND : TPCJSONData;
|
|
|
- s : AnsiString;
|
|
|
+ s : String;
|
|
|
begin
|
|
|
if Not Assigned(PCJSONData) then Abort;
|
|
|
if (PCJSONData is TPCJSONObject) AND (Self is TPCJSONObject) then begin
|
|
@@ -1040,10 +1040,10 @@ begin
|
|
|
end;
|
|
|
|
|
|
procedure TPCJSONData.SaveToStream(Stream: TStream);
|
|
|
-Var s : AnsiString;
|
|
|
+Var s : RawByteString;
|
|
|
begin
|
|
|
s := ToJSON(false);
|
|
|
- Stream.Write(s[1],length(s));
|
|
|
+ Stream.Write(s[Low(s)],Length(s));
|
|
|
end;
|
|
|
|
|
|
class function TPCJSONData.ParseJSONValue(Const JSONObject: String): TPCJSONData;
|
|
@@ -1051,7 +1051,7 @@ begin
|
|
|
Result := ParseJSONValue( TEncoding.ASCII.GetBytes(JSONObject) );
|
|
|
end;
|
|
|
|
|
|
-function TPCJSONData.ToJSON(pretty: Boolean): AnsiString;
|
|
|
+function TPCJSONData.ToJSON(pretty: Boolean): String;
|
|
|
begin
|
|
|
Result := ToJSONFormatted(pretty,'');
|
|
|
end;
|