如何使用 SuperObject 序列化包含点(例如 IP 地址)的 JSON 密钥?

2024-03-28

我正在尝试保存 JSON,其中 IP 是关键。预期的 JSON 结果是:

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

Delphi超级对象代码:

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 密钥?


解决方案是从字符串创建 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"}}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 SuperObject 序列化包含点(例如 IP 地址)的 JSON 密钥? 的相关文章

随机推荐