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 标准输入,默认从键盘读 ...
随机推荐
- java web项目去除项目名称访问设置方法及tomcat的<Host>标签讲解
本文为博主原创,未经允许不得转载. 在集群项目中,为了方便用户可以更快捷的访问,即只需要输入IP和端口号,就可以直接访问项目,因为 模块比较多,记住项目名称并不容易,所以在网上查看和学习了下设置的方法 ...
- POJ 1011 Sticks(dfs+剪枝)
http://poj.org/problem?id=1011 题意:若干个相同长度的棍子被剪成若干长度的小棍,求每根棍子原来的可能最小长度. 思路:很经典的搜索题. 我一开始各种超时,这题需要很多剪枝 ...
- booststrap select2的应用总结
本身对前端js了解不是特别多,在项目中,遇到很多前端的问题,有时间整理一下,有不对的地方,不吝赐教,多多批评指正. 在项目中,遇到最多的select下拉框情景,莫过于多选和单选了 单选是很容易理解的, ...
- MongoDB(课时3 MongoDB基本操作)
3.3 MongoDB的基本操作 在MongoDB数据库里面存在数据库的概念,但没有模式(所有的信息都是按照文档保存的),保存数据的结构是BSON结构,只不过在进行一些数据处理的时候才会使用到Mong ...
- 引用类(RC)
R 中还有一种具有引用语义的类系统,它更像其他面向对象编程语言中的类系统.首先,为了定义一个引用类( reference class , RC ),我们要给 setRefClass( )一个类定义.不 ...
- [原][osg][gdal]两种方式修改tiff高程
因为对于globalmap不熟悉,不怎么怎么修改高程,好像也没有这功能. 干脆自己手动修改了高程图tiff了 由于自身一直使用osg的 自己使用了osgDB直接读取tiff,修改后保存的. 同事小周一 ...
- dom 绑定数据
一.绑定/修改 .jQuery修改属性值,都是在内存中进行的,并不会修改 DOM 1. 对象绑定 $(selector).data(name) $("#form").da ...
- Hibernate入门第二课 Hibernate Tools for Eclipse Plugins安装
Hibernate入门第二课 Hibernate Tools for Eclipse Plugins安装 你们可以直接去,http://blog.csdn.net/wei_chong_chong/ar ...
- C++编程模板2
C++编程模板2 #include <iostream> using namespace std; /* */ int main(){ int ans; printf("%d\n ...
- Confluence 6 导入 Active Directory 服务器证书 - Windows
为了让你的应用服务器能够信任你的目录服务器.你目录服务器上导出的证书需要导入到你应用服务器的 Java 运行环境中.JDK 存储了信任的证书,这个存储信任证书的文件称为一个 keystore.默认的 ...