TJson.format() 输出错误的CRLF
下面的JSON串:
{
"a":"x=\"a,b\""
}
通过下面代码输出,多了CRLF:
procedure JsonFormatTest;
var jo:TJsonObject;
j:TJson;
begin
jo := TJsonObject.Create;
jo.AddPair('a', 'x="a,b"'); j := TJson.Create;
ShowMessage( j.Format(jo) );
end;
变成这样:
{
"a":"x=\"a,
b\""
}
下面是修正方法:
unit MM.Helpers.REST.Json; interface uses
System.Types, System.JSON, REST.Json; type
TJsonHelper = class helper for TJson
public
class function HFormat(AJsonValue: TJsonValue): string;
end; implementation { TJsonHelper } class function TJsonHelper.HFormat(AJsonValue: TJsonValue): string;
var
s: string;
c: char;
EOL: string;
INDENT: string;
LIndent: string;
isEOL: boolean;
isInString: boolean;
isEscape: boolean;
begin
Result := '';
EOL := sLineBreak; // kanteruk: use platform line brake
INDENT := ' ';
isEOL := true;
isInString := false;
isEscape := false;
s := AJsonValue.ToJSON; // kanteruk: fix here
for c in s do
begin
if not isInString and ((c = '{') or (c = '[')) then
begin
if not isEOL then
Result := Result + EOL;
Result := Result + LIndent + c + EOL;
LIndent := LIndent + INDENT;
Result := Result + LIndent;
isEOL := true;
end
else if not isInString and (c = ',') then
begin
isEOL := false;
Result := Result + c + EOL + LIndent;
end
else if not isInString and ((c = '}') or (c = ']')) then
begin
Delete(LIndent, , Length(INDENT));
if not isEOL then
Result := Result + EOL;
Result := Result + LIndent + c + EOL;
isEOL := true;
end
else
begin
isEOL := false;
Result := Result + c;
end;
if not isEscape and (c = '"') then
isInString := not isInString;
isEscape := (c = '\') and not isEscape; // kanteruk: fix here, move this line down
end;
end; end.
Delphi 10.2.3,官方QC地址:https://quality.embarcadero.com/browse/RSP-20404
TJson.format() 输出错误的CRLF的更多相关文章
- Spring MVC自定义统一异常处理类,并且在控制台中输出错误日志
在使用SimpleMappingExceptionResolver实现统一异常处理后(参考Spring MVC的异常统一处理方法), 发现出现异常时,log4j无法在控制台输出错误日志.因此需要自定义 ...
- WIN32程序挂钩SetLastError,输出错误描述到控制台
WIN32程序挂钩SetLastError,输出错误描述到控制台 作者:徐灵甫 一.窗口模式应用程序(GUI)启用控制台的方法为: 步骤 方法 1 启动/关闭控制台 AllocConsole()Fre ...
- ubuntu12.04软件中心打开错误和 ubuntu 包管理之“:E: 读错误 - read (5: 输入/输出错误) E: 无法解析或打开软件包的列表或是状态文件。”的解决
执行ubuntu软讲中心时打不开.老是崩溃,从终端也下载不了软件. 执行包管理的update或者search等等会报错: E: 读错误 - read (5: 输入/输出错误) E: 无法解析或打开软件 ...
- rm: 无法删除 "xxxxx.o" : 输入/输出错误.
rm: 无法删除 "xxxxx.o" : 输入/输出错误. 碰到无法删除的文件,以为完蛋了,要重装. 后面重启一下就可以了
- 在进行多次scanf时,printf输出错误
随便一处代码,经过改正后,输出正确的 ''' #include <stdio.h> int main(){ int T; scanf("%d",&T ...
- Java输出错误信息与调试信息
创建一个类,在该类的main()主方法中,使用System类中的out和err两个成员变量来完成调试与错误信息的输出. public class PrintErrorAndDebug { public ...
- 20200427_ls_正在读取目录_输入/输出错误
环境: 在Centos7.2上挂载了一个2T的移动硬盘, 使用vim 在移动硬盘中编辑 .sh文件, wq的时候提示出错, 然后清空的文件, 可以正常wq出来 [root@localhost yido ...
- qemu:///system 没有连接驱动器可用;读取数据时进入文件终点: 输入/输出错误
原因 1. KVM的相关包 装少了 2KVM的相关包 重新安装 3 May 31 15:22:55 localhost libvirtd: 2019-05-31 07:22:55.554+0000: ...
- [linux] 输入&输出&错误流
输入&输出&错误流 Linux中有三种标准输入输出,分别是STDIN,STDOUT,STDERR,对应的数字分别是0,1,2. 标准 数字 含义 STDIN 0 标准输入,默认从键盘读 ...
随机推荐
- ElasticSearch 5.4 自定义插件
ElasticSearch 做为数据仓库处理速度确实很强,但是很多和业务相关的函数ElasticSearch怎么支持的,通过查询发现,ElasticSearch支持自定义插件(相当于自定义函数),通过 ...
- Ubuntu 14.04 更新gcc版本至4.9.2
参考: ubuntu 14.04 更新 gcc/g++ 4.9.2 Ubuntu 14.04 更新gcc版本至4.9.2 1.更新源,安装gcc v4.9.2 $ sudo add-apt-repos ...
- nohup 与 &
&的意思是在后台运行, 什么意思呢? 意思是说, 当你在执行 ./a.out & 的时候, 即使你用ctrl C, 那么a.out照样运行(因为对SIGINT信号免疫). 但是要注 ...
- Jmeter性能测试 对服务器使用资源进行监控之ServerAgent插件使用
百度云盘友情赞助地址如下: 链接:https://pan.baidu.com/s/1cpAeOcfFX8kss1eo79UD9g 密码:b8o7 在windows上或者linux上打开服务 用Jmet ...
- Python day10 global关键字、函数递归、匿名函数、map函数的用法详解
1.global关键字 引用全局变量,在局部全局变量改变,也会改变,global相当于指针,将地址指向全局变量的name name='littlepage' def littepage(): glob ...
- [ios]ios画线 使用CGContextRef,CGPath和UIBezierPath来绘画
参考 :http://www.mgenware.com/blog/?p=493 这三种东西:CGContextRef,CGPath和UIBezierPath.本质上都是一样的,都是使用Quartz来绘 ...
- jsonSchema
可参考http://www.cnblogs.com/chenmo-xpw/p/5818773.html 我的理解 jsonSchema最大的用途是去定义和校验json数据,相当于一种json数据的一种 ...
- English trip V1 - 4.Do you have it? Teacher:Patrick Key: have - has doesn't have
In this lesson you will learn to describe what you have. STARTER Do you have a ...? # 你有...吗? car b ...
- Oracle性能诊断艺术-读书笔记(脚本execution_plans截图)
- Leetcode 86
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode ...