2014-03-26 8 views
6

Ich versuche, JSON zu speichern, wo IP ein Schlüssel ist. Erwartete JSON Ergebnis:Wie serialisiert man JSON-Schlüssel mit Punkten (wie beispielsweise IP-Adresse) mit SuperObject?

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

Der Delphi SuperObject Code:

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 parst Punkte als Pfadtrennzeichen eines JSON-Objekt:

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

Wie IP als JSON speichern Schlüssel richtig mit SuperObject?

Antwort

6

Die Lösung ist JSON-Objekt aus string

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

anderen Art und Weise hinzuzufügen (nicht verwenden mit .O [], weil asObject gibt Null für nicht vorhandenen Schlüssel) zu erstellen:

// 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

Dies funktioniert auch:

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