簡體   English   中英

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

[英]How to serialize JSON key containing dots (like e.g. IP address) with SuperObject?

我正在嘗試保存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密鑰?

解決方案是從字符串創建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"}}

這也有效:

var    
  tmp: ISuperObject;
begin
  tmp := SO([IpAddr, port]);
  Json.A['SnmpManagers'].Add(tmp);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM