gpt4 book ai didi

JSONValue 到缩进字符串

转载 作者:行者123 更新时间:2023-12-03 18:16:33 26 4
gpt4 key购买 nike

在 Delphi XE2 中,我需要创建一个接收 JSONValue 并返回缩进的 String 的函数,很像 JSONLint .这个 JSONValue 可以是任何类型的 JSON,可以是数组、对象,甚至只是一个字符串,所以我必须确保用这个函数覆盖所有类型。我不知道从哪里开始。

最佳答案

您必须递归地执行此操作。像这样:

const INDENT_SIZE = 2;

procedure PrettyPrintJSON(value: TJSONValue; output: TStrings; indent: integer = 0); forward;

procedure PrettyPrintPair(value: TJSONPair; output: TStrings; last: boolean; indent: integer);
const TEMPLATE = '%s : %s';
var
line: string;
newList: TStringList;
begin
newList := TStringList.Create;
try
PrettyPrintJSON(value.JsonValue, newList, indent);
line := format(TEMPLATE, [value.JsonString.ToString, Trim(newList.Text)]);
finally
newList.Free;
end;

line := StringOfChar(' ', indent * INDENT_SIZE) + line;
if not last then
line := line + ','
output.add(line);
end;

procedure PrettyPrintJSON(value: TJSONValue; output: TStrings; indent: integer);
var
i: integer;
begin
if value is TJSONObject then
begin
output.add(StringOfChar(' ', indent * INDENT_SIZE) + '{');
for i := 0 to TJSONObject(value).size - 1 do
PrettyPrintPair(TJSONObject(value).Get(i), output, i = TJSONObject(value).size - 1, indent + 1);
output.add(StringOfChar(' ', indent * INDENT_SIZE) + '}');
end
else if value is TJSONArray then
//left as an exercise to the reader
else output.add(StringOfChar(' ', indent * INDENT_SIZE) + value.ToString);
end;

这涵盖了基本原则。警告:我把这个写在了我的头顶上。它可能不正确甚至无法编译,但这是一般的想法。此外,您还必须想出自己的打印 JSON 数组的实现。但这应该可以帮助您入门。

关于JSONValue 到缩进字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11797583/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com