Browse Source

jsonformat

Unknown 6 years ago
parent
commit
a0b0a2aed8
1 changed files with 125 additions and 0 deletions
  1. 125 0
      Quick.JSON.Utils.pas

+ 125 - 0
Quick.JSON.Utils.pas

@@ -0,0 +1,125 @@
+{ ***************************************************************************
+
+  Copyright (c) 2015-2018 Kike Pérez
+
+  Unit        : Quick.JSON.Utils
+  Description : Json utils
+  Author      : Kike Pérez
+  Version     : 1.4
+  Created     : 21/09/2018
+  Modified    : 24/09/2018
+
+  This file is part of QuickLib: https://github.com/exilon/QuickLib
+
+ ***************************************************************************
+
+  Licensed under the Apache License, Version 2.0 (the "License");
+  you may not use this file except in compliance with the License.
+  You may obtain a copy of the License at
+
+  http://www.apache.org/licenses/LICENSE-2.0
+
+  Unless required by applicable law or agreed to in writing, software
+  distributed under the License is distributed on an "AS IS" BASIS,
+  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+  See the License for the specific language governing permissions and
+  limitations under the License.
+
+ *************************************************************************** }
+
+unit Quick.JSON.Utils;
+
+{$i QuickLib.inc}
+
+interface
+
+uses
+  SysUtils;
+
+type
+
+  TJsonUtils = class
+  public
+    class function IncludeJsonBraces(const json : string) : string;
+    class function RemoveJsonBraces(const json : string) : string;
+    class function JsonFormat(const json : string): string;
+  end;
+
+implementation
+
+class function TJsonUtils.IncludeJsonBraces(const json : string) : string;
+begin
+  if (not json.StartsWith('{')) and (not json.EndsWith('}')) then Result := '{' + json + '}'
+    else Result := json;
+end;
+
+class function TJsonUtils.RemoveJsonBraces(const json : string) : string;
+begin
+  if (json.StartsWith('{')) and (json.EndsWith('}')) then Result := Copy(json,2,Json.Length - 2)
+    else Result := json;
+end;
+
+
+class function TJsonUtils.JsonFormat(const json : string) : string;
+const
+  EOL = #13#10;
+  INDENT = '    ';
+  SPACE = ' ';
+var
+  c : char;
+  LIndent : string;
+  isEOL : Boolean;
+  isIntoString : Boolean;
+  isEscape : Boolean;
+  i : Integer;
+begin
+  Result := '';
+  isEOL := True;
+  isIntoString := False;
+  isEscape := False;
+  for i := 1 to json.Length do
+  begin
+    c := json[i];
+    if isIntoString then
+    begin
+      isEOL := False;
+      Result := Result + c;
+    end
+    else
+    begin
+      case c of
+        ':' : Result := Result + c + SPACE;
+        '{','[' :
+          begin
+            LIndent := LIndent + INDENT;
+            if json[i+1] in ['}',']'] then Result := Result + c
+              else Result := Result + c + EOL + LIndent;
+            isEOL := True;
+          end;
+        ',' :
+          begin
+            isEOL := False;
+            Result := Result + c + EOL + LIndent;
+          end;
+        '}',']' :
+          begin
+            Delete(LIndent, 1, Length(INDENT));
+            if not isEOL then Result := Result + EOL;
+            if json[i+1] = ',' then Result := Result + LIndent + c
+              else if json[i-1] in ['{','['] then Result := Result + c + EOL
+                else Result := Result + LIndent + c + EOL;
+            isEOL := True;
+          end;
+        else
+          begin
+            isEOL := False;
+            Result := Result + c;
+          end;
+      end;
+    end;
+    isEscape := (c = '\') and not isEscape;
+    if not isEscape and (c = '"') then isIntoString := not isIntoString;
+  end;
+end;
+
+end.