【Delphi】JSON字符串格式化(无内存泄露,速度快)

本文介绍了如何在 Delphi 中使用 uWriters 单元来格式化 JSON 字符串,使原本难以阅读的一长串字符变得层次清晰、易于阅读。通过 TJsonStringWriter 和 TJsonStringReader 类实现格式化,并提供了示例代码展示如何处理包括数组在内的 JSON 数据。此方法经过测试,无内存泄露,且格式化速度快。
摘要由CSDN通过智能技术生成

在开发中,经常需要对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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

海纳老吴

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值