我试图保存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密钥?
答案 0 :(得分:6)
解决方案是从字符串
创建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"}}
答案 1 :(得分:1)
这也有效:
var
tmp: ISuperObject;
begin
tmp := SO([IpAddr, port]);
Json.A['SnmpManagers'].Add(tmp);