方法一:需要引用单元:System.JSON,REST.Json
可以格式化 TJSONObject 和 TJSONArray。入口参数,需要格式化的JSON字符串,出口为格式化后的JSON字符串。
function Format_JSON(FJSON: String): String;
var
JObjectData : TJSONObject;
JArrayJSON : TJSONArray;
begin
if TJSONObject.ParseJSONValue(FJSON) is TJSONObject then begin
JObjectData := TJSONObject.ParseJSONValue(FJSON) as TJSONObject;
Result := TJson.Format(JObjectData);
JObjectData.Free;
end else if TJSONObject.ParseJSONValue(FJSON) is TJSONArray then begin
JArrayJSON := TJSONObject.ParseJSONValue(FJSON) as TJSONArray;
Result := TJson.Format(JArrayJSON);
JArrayJSON.DisposeOf; //移动端有区别,否则和VCL没有区别。
end else
Result := FJSON;
end;
方法二:需要引入单元:Writers.pas 和 System.JSON
入口参数,需要格式化的JSON字符串,出口为格式化后的JSON字符串。
function Format_JSON(JSONStr: string;
withTAB: Boolean): string;
var
JsonWriter: TJsonStringWriter;
JsonReader: TJsonStringReader;
begin
// 1. 首先判断下 JSONStr 是否是合法的 JSON
if not ((TJSONObject.ParseJSONValue(JSONStr) is TJSONObject) or
(TJSONObject.ParseJSONValue(JSONStr) is TJSONArray)) then
Exit(JSONStr);
JsonReader := TJsonStringReader.Create(JSONStr);
JsonWriter := TJsonStringWriter.Create;
// 这一句必须存在,否则不会进行格式化
JsonWriter.Formatting := TJsonFormatting.Indented;
try
JsonWriter.WriteToken(JsonReader);
Result := JsonWriter.ToString;
if withTAB then
begin
Result := Result.Replace(#13#10, #13#10#9);
Result := #9 + Result;
end;
finally
JsonWriter.Free;
JsonReader.Free;
end;
end;
2022-01-30 sensor
|