StringToJSONString
StringToJSONString
function StringToJSONString(const S: string; strict: Boolean = False): string;
var
I, J, L: Integer;
P: PChar;
C: Char;
begin
I := 1;
J := 1;
Result := '';
L := Length(S);
P := PChar(S);
while I <= L do
begin
C := Char(P^);
Result := Result + Copy(S, J, I - J);
if (C in ['a'..'z']) or (C in ['A'..'Z']) or (C in ['0'..'9']) or (C = ':')
or (c='{') or (c='}') or (c='"') or (c='[') or (c=']') or (c=','
) then
Result := Result + C
else
case C of
'\':
Result := Result + '\\';
'/':
if strict then
Result := Result + '\/'
else
Result := Result + '/';
#8: //退格
Result := Result + '\b';
#9: //水平定位符号
Result := Result + '\t';
#10: //换行键
Result := Result + '\n';
#12: //换页键
Result := Result + '\f';
#13: //回车
Result := Result + '\r';
else //汉字
Result := Result + '\u' + IntToHex(Ord(C), 4);
end;
J := I + 1;
Inc(I);
Inc(P);
end;
Result := Result + Copy(S, J, I - 1);
end;
function JSONStringToString(const S: string): string;
var
I, J, L: Integer;
P: PChar;
w: string;
begin
I := 1;
J := 1;
L := Length(S);
Result := '';
P := PChar(S);
while (I <= L) do
begin
if (P^ = '\') then
begin
Result := Result + Copy(S, J, I - J);
Inc(P);
if (P^ <> #0) then
begin
Inc(I);
case Char(P^) of
'\', '"', '/':
Result := Result + P^;
'b':
Result := Result + #8;
't':
Result := Result + #9;
'n':
Result := Result + #10;
'f':
Result := Result + #12;
'r':
Result := Result + #13;
'u':
begin
w := Copy(S, I + 1, 4);
Inc(I, 4);
Inc(P, 4);
Result := Result + Char(StrToInt('$' + w));
end;
end;
end;
J := I + 1;
end;
Inc(I);
Inc(P);
end;
Result := Result + Copy(S, J, I - J + 1);
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
var s: string;
s := StringToJSONString('{"Key1":"张三"}');
memo2.Lines.Add(s); //{"Key1":"\u5F20\u4E09"}
s := JSONStringToString(s); //{"Key1":"张三"}
memo2.Lines.Add(s);
end;
本文来自博客园,作者:{咏南中间件},转载请注明原文链接:https://www.cnblogs.com/hnxxcxg/p/14066600.html

浙公网安备 33010602011771号