2017-05-03 4 views
0

Scenario: Ich habe eine schemaless Datenbank-API, die Typ basierend auf JSON übergeben wird. Sobald die Datenbank das Schema jedoch akzeptiert, müssen alle nachfolgenden Einträge, die zu derselben Tabelle hinzugefügt wurden, dem bestehenden Schema folgen. Ich schicke json-formatierte Daten von meiner Swift-App zu einem REST-Endpunkt.Serialize schwimmt zu JSON in Swift, ohne dezimalen

Ich verwende ObjectMapper schema/Serialisierung für Daten innerhalb der Swift App zu definieren, zB:

class ExampleDatum: Mappable { 

    value: Float? 

    init() { 
    } 

    required init?(map: Map) { 
    } 

    func mapping(map: Map) { 
     value <- map["value"] 
    } 
} 

Das Problem kommt, dass, wenn der Wert eine ganze Zahl ist, json ohne Komma formatiert ist, führt inkonsistente Interpretation dieses Feldes als integer/float:

let datum = ExampleDatum() 
datum.value = 5.0 
print(datum.toJSONString()) 
>> {"value": 5} 

Was ist die beste Praxis ist diese Art Informationen in JSON einzubetten, zB um den Dezimalpunkt zu erzwingen, immer enthalten sein? Im Idealfall Probieren Sie etwas wie {"value": 5.0}

+0

Ich bin supprised, dass dies sogar kompiliert. Der angegebene Initiator für dieses Framework ist 'ExampleDatum (JSON: [String: Any])'. Auf diese Weise wird Ihr Float vom eingebauten Mapper verarbeitet. Vielleicht würde das dein Problem lösen? – Desdenova

+0

Sorry hat den Standardkonstruktor vergessen, oben im Codebeispiel behoben. Aber das Problem hier ist für die Serialisierung von Float zu den gemappten JSON –

Antwort

0

let value = 5.0 
let float_string = String(format: "%#f", value) 
+0

Dies ist in der Nähe - versucht mit [benutzerdefinierte Transformationen] (https://github.com/Hearst-DD/ObjectMapper#custom-transforms), z. '(map [" Wert "], TransformOf (ausJSON: {Float ($ 0!)}, ToJSON: {$ 0.map {String (Format:"% # f ", $ 0)}}) '- Das Problem ist, dass serialisiert als eine Zeichenfolge und wird als Zeichenfolge anstelle einer Zahl von Datenbank Endpunkt abgeleitet –