6

我正在尝试将 JSON 保存在 IP 是关键的地方。预期的 JSON 结果是:

{"SnmpManagers":[{"10.112.25.235":162}]}

Delphi SuperObject 代码:

const
  IpAddr = '10.112.25.235';
  Port = 162;
var
  tmp: TSuperObject;
begin
  tmp := TSuperObject.Create;
  tmp.I[IpAddr] := Port;
  Json.A['SnmpManagers'].Add(tmp);
end;

SuperObject 将点解析为 JSON 对象的路径分隔符:

{"SnmpManagers":[{"10":{"112":{"25":{"235":162}}}}]}

如何使用 SuperObject 正确地将 IP 保存为 JSON 密钥?

4

2 回答 2

7

解决方案是从字符串创建 JSON 对象

Json.A['SnmpManagers'].Add(SO(Format('{"%s":%d}', [IpAddr, Port])));

另一种添加方式(不要与 .O[] 一起使用,因为 AsObject 为不存在的键提供 nil ):

// for a simple key-value object
Json.AsObject.S['1.2.3'] := 'a'; // gives us {{"1.2.3":"a"}}
Json.AsObject.S['4.5'] := 'b'; // gives us {{"1.2.3":"a"}, {"4.5":"b"}}
于 2014-03-26T06:13:24.180 回答
1

这也有效:

var    
  tmp: ISuperObject;
begin
  tmp := SO([IpAddr, port]);
  Json.A['SnmpManagers'].Add(tmp);
于 2014-03-27T01:09:59.730 回答