如何在Delphi中使用值(而不是对)填充JSON数组?

BIB*_*IBD 3 delphi json delphi-10-seattle

我正在尝试创建如下所示的JSON:

{ "guestlist": ["alice","bob","charlie"] }
Run Code Online (Sandbox Code Playgroud)

我看到用于填充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;
Run Code Online (Sandbox Code Playgroud)

但这会导致类似这样的事情:

{ "guestlist": [{"person":"alice"},{"person":"bob"},{"person":"charlie"}] }
Run Code Online (Sandbox Code Playgroud)

如何将单个值添加到数组而不是一对?我在文档中没有看到TJsonObject如何做到这一点,

J..*_*... 9

这实际上比你想要的要简单得多.A 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.
Run Code Online (Sandbox Code Playgroud)

产生输出:

{"guestlist":["alice","bob","charlie"]}
Run Code Online (Sandbox Code Playgroud)

  • 你也可以做`LJObj.AddPair('guestlist',LGuestList);`所以你不必明确地调用`TJSONPair.Create()`. (2认同)