在开发中,经常需要对JSON字符串进行格式化,便于阅读,如果不进行格式化,整个就是一长串字符,难以阅读。经过格式化的JSON字符串,换行、层级很清晰,适合阅读。这里介绍一种delphi格式化JSON字符串的方法。本函数支持JSON数组格式化!
需要使用到官方的 uWriters 单元,可以直接0分下载:https://download.csdn.net/download/sensor_WU/21106404
例如 JSON 字符串:{“name”:“sensor”,“add”:“China Shenzhen”,“age”:50,“color”:“red”}
格式化后:
{
“name”: “sensor”,
“add”: “China Shenzhen”,
“age”: 50,
“color”: “red”
}
程序如下:
{2021-08-16 sensor 经过测试,可以格式化 TJSONObject 和 TJSONArray 等
大数据测试,无内存泄露,另外格式化速度块
}
unit uFormat_JSON;
interface
uses
uWriters, // 位于https://download.csdn.net/download/sensor_WU/21106404
System.SysUtils,
System.Classes,
System.JSON,
System.JSON.Types;
//格式化 JSON字符串
//参数说明:
// JSONStr : 需要进行格式化的字符串
// withTAB : 表示是否需要整体缩进,主要是为了写日志时看起来漂亮,格式化后的字符串有缩进。默认包含缩进
// 结果:已经格式化后的字符串。
function Format_JSON(JSONStr : string; withTAB : Boolean = True) : string;
implementation
function Format_JSON(JSONStr : string; withTAB : Boolean = True) : string;
var
JsonWriter: TJsonStringWriter;
JsonReader: TJsonStringReader;
jv : TJSONValue;
begin
//1. 首先判断下 JSONStr 是否是合法的 JSON 字符串,如果不是,就直接返回
jv := TJSONObject.ParseJSONValue(JSONStr) as TJSONValue;
if jv = nil then Exit(JSONStr);
JsonReader := TJsonStringReader.Create(JSONStr);
JsonWriter := TJsonStringWriter.Create;
//这一句必须有,进行格式设置
JsonWriter.Formatting := TJsonFormatting.Indented; //System.JSON.Types
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;
end.
标记于2021-08-16 sensor