Quick.Json.fpc.Compatibility.pas 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. unit Quick.Json.fpc.Compatibility;
  2. {$i QuickLib.inc}
  3. interface
  4. uses
  5. Classes,
  6. SysUtils,
  7. fpjson,
  8. jsonparser;
  9. type
  10. TJsonPair = class
  11. private
  12. fJsonString : string;
  13. fJsonValue : TJsonData;
  14. public
  15. constructor Create(const aName : string; aValue : TJsonData);
  16. property JsonString : string read fJsonString write fJsonString;
  17. property JsonValue : TJsonData read fJsonValue write fJsonValue;
  18. end;
  19. { TJsonArray }
  20. TJsonArray = class(fpjson.TJSONArray)
  21. public
  22. procedure AddElement(aValue : TJsonData);
  23. end;
  24. { TJsonObject }
  25. TJsonObject = class(fpjson.TJsonObject)
  26. private
  27. function GetPair(Index : Integer): TJsonPair;
  28. public
  29. procedure AddPair(aValue : TJsonPair); overload;
  30. procedure AddPair(const aName : TJsonStringType; aValue : TJsonData); overload;
  31. class function ParseJSONValue(const JSON: string; const UseUTF8: Boolean = True): TJSONData;
  32. function GetValue(const aName : string) : TJsonData;
  33. function ToJson : TJSONStringType;
  34. property Pairs[Index : Integer] : TJsonPair read GetPair; default;
  35. end;
  36. TJsonValue = TJsonData;
  37. TJsonNumber = class(fpjson.TJsonIntegerNumber)
  38. public
  39. constructor Create(aValue : Integer); overload;
  40. constructor Create(aValue : Extended); overload;
  41. end;
  42. TJsonString = class(fpjson.TJsonString)
  43. public
  44. constructor Create(const aValue : string); overload;
  45. end;
  46. TJsonBool = class(fpjson.TJSONBoolean)
  47. public
  48. constructor Create(aValue : Boolean);
  49. end;
  50. implementation
  51. { TJsonArray }
  52. procedure TJsonArray.AddElement(aValue: TJsonData);
  53. begin
  54. Add(aValue);
  55. end;
  56. function TJsonObject.GetPair(Index : Integer): TJsonPair;
  57. begin
  58. Result := TJsonPair.Create(Self.Names[Index],Self.Items[Index]);
  59. end;
  60. procedure TJsonObject.AddPair(aValue : TJsonPair);
  61. begin
  62. Add(aValue.JsonString,aValue.JsonValue);
  63. end;
  64. procedure TJsonObject.AddPair(const aName: TJsonStringType; aValue: TJsonData);
  65. begin
  66. Add(aName,aValue);
  67. end;
  68. class function TJsonObject.ParseJSONValue(const JSON: string; const UseUTF8: Boolean = True): TJSONData;
  69. begin
  70. Result := GetJson(JSON,UseUTF8);
  71. end;
  72. function TJsonObject.ToJson : TJSONStringType;
  73. begin
  74. try
  75. Result := AsJson;
  76. except
  77. raise Exception.Create('Json not valid');
  78. end;
  79. end;
  80. function TJsonObject.GetValue(const aName : string) : TJsonData;
  81. begin
  82. Result := Find(aName);
  83. end;
  84. constructor TJsonPair.Create(const aName : string; aValue : TJsonData);
  85. begin
  86. fJsonString := aName;
  87. fJsonValue := aValue;
  88. end;
  89. constructor TJsonNumber.Create(aValue : Integer);
  90. begin
  91. inherited Create(aValue);
  92. end;
  93. constructor TJsonNumber.Create(aValue : Extended);
  94. begin
  95. Create(aValue);
  96. end;
  97. constructor TJsonBool.Create(aValue : Boolean);
  98. begin
  99. inherited Create(aValue);
  100. end;
  101. constructor TJsonString.Create(const aValue : string);
  102. begin
  103. inherited Create(aValue);
  104. end;
  105. end.