如何用 Delphi 中的值(不是对)填充 JSON 数组?
How do I populate a JSON array with values (not pairs) in Delphi?
我正在尝试创建如下所示的 JSON:
{ "guestlist": ["alice","bob","charlie"] }
我看到的填充 JSON 数组的典型示例如下所示:
var
jsobj: TJsonObject;
jso : TJsonObject;
jsa : TJsonArray;
jsp : TJsonPair;
begin
jsObj := TJsonObject.Create();
jsa := TJsonArray.Create();
jsp := TJSONPair.Create('guestlist', jsa);
jsObj.AddPair(jsp);
jso := TJsonObject.Create();
jso.AddPair(TJSONPair.Create('person', 'alice'));
jsa.AddElement(jso);
jso := TJsonObject.Create();
jso.AddPair(TJSONPair.Create('person', 'bob'));
jsa.AddElement(jso);
jso := TJsonObject.Create();
jso.AddPair(TJSONPair.Create('person', 'charlie'));
jsa.AddElement(jso);
end;
但这会导致这样的结果:
{ "guestlist": [{"person":"alice"},{"person":"bob"},{"person":"charlie"}] }
如何向数组添加单个值而不是一对?我在 TJsonObject
的文档中没有看到关于如何执行此操作的任何内容,
这实际上比您想象的要简单得多。 TJSONArray
可以愉快地包含任何 TJSONValue
作为元素,因此解决方案非常简单。
program Project1;
{$APPTYPE CONSOLE}
uses
JSON;
var
LJObj : TJSONObject;
LGuestList : TJSONArray;
begin
LGuestlist := TJSONArray.Create();
LGuestList.Add('alice');
LGuestList.Add('bob');
LGuestList.Add('charlie');
LJObj := TJSONObject.Create;
LJObj.AddPair(TJSONPair.Create('guestlist', LGuestList));
WriteLn(LJObj.ToString);
ReadLn;
end.
产生输出:
{"guestlist":["alice","bob","charlie"]}
以防万一您有兴趣寻找替代方案:我创建了 jsonDoc,主要是因为我喜欢 COM 接口和 OleVariants,不喜欢长长的重载列表。那么上面的代码可以是这样的:
JSON(['guestlist',
VarArrayOf([JSON(['person','alice']),
JSON(['person','bob']),
JSON(['person','charlie'])
])
])
我正在尝试创建如下所示的 JSON:
{ "guestlist": ["alice","bob","charlie"] }
我看到的填充 JSON 数组的典型示例如下所示:
var
jsobj: TJsonObject;
jso : TJsonObject;
jsa : TJsonArray;
jsp : TJsonPair;
begin
jsObj := TJsonObject.Create();
jsa := TJsonArray.Create();
jsp := TJSONPair.Create('guestlist', jsa);
jsObj.AddPair(jsp);
jso := TJsonObject.Create();
jso.AddPair(TJSONPair.Create('person', 'alice'));
jsa.AddElement(jso);
jso := TJsonObject.Create();
jso.AddPair(TJSONPair.Create('person', 'bob'));
jsa.AddElement(jso);
jso := TJsonObject.Create();
jso.AddPair(TJSONPair.Create('person', 'charlie'));
jsa.AddElement(jso);
end;
但这会导致这样的结果:
{ "guestlist": [{"person":"alice"},{"person":"bob"},{"person":"charlie"}] }
如何向数组添加单个值而不是一对?我在 TJsonObject
的文档中没有看到关于如何执行此操作的任何内容,
这实际上比您想象的要简单得多。 TJSONArray
可以愉快地包含任何 TJSONValue
作为元素,因此解决方案非常简单。
program Project1;
{$APPTYPE CONSOLE}
uses
JSON;
var
LJObj : TJSONObject;
LGuestList : TJSONArray;
begin
LGuestlist := TJSONArray.Create();
LGuestList.Add('alice');
LGuestList.Add('bob');
LGuestList.Add('charlie');
LJObj := TJSONObject.Create;
LJObj.AddPair(TJSONPair.Create('guestlist', LGuestList));
WriteLn(LJObj.ToString);
ReadLn;
end.
产生输出:
{"guestlist":["alice","bob","charlie"]}
以防万一您有兴趣寻找替代方案:我创建了 jsonDoc,主要是因为我喜欢 COM 接口和 OleVariants,不喜欢长长的重载列表。那么上面的代码可以是这样的:
JSON(['guestlist',
VarArrayOf([JSON(['person','alice']),
JSON(['person','bob']),
JSON(['person','charlie'])
])
])