2017-05-03 3 views
0

Scénario: J'ai une API de base de données schemaless qui déduit le type basé sur json qui y est passé. Une fois que la base de données a déduit le schéma, toutes les entrées suivantes ajoutées à la même table doivent suivre le schéma existant. Je transfère des données au format json vers un point de terminaison REST à partir de mon application Swift.Sérialisation en flottant vers JSON dans Swift sans abandonner la décimale

J'utilise ObjectMapper pour définir le schéma/sérialisation des données dans l'application Swift, par exemple:

class ExampleDatum: Mappable { 

    value: Float? 

    init() { 
    } 

    required init?(map: Map) { 
    } 

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

La question est que si la valeur est un nombre entier, JSON est formaté sans la virgule, ce qui à l'interprétation contradictoire de ce champ comme un entier/float:

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

Quelle est la meilleure pratique pour intégrer ces informations de type JSON, par exemple pour appliquer le point décimal toujours être inclus? Idéalement quelque chose comme {"value": 5.0}

+0

Je suis supprised que cette compile même. L'initiliazer désigné pour ce framework est 'ExampleDatum (JSON: [String: Any])'. De cette façon, votre flottant sera traité par le mappeur intégré. Peut-être que cela résoudrait votre problème? – Desdenova

+0

Désolé, constructeur par défaut oublié, corrigé dans l'exemple de code ci-dessus. Mais le problème ici est pour la sérialisation de float vers le json mappé –

Répondre

0

Essayez

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

Ceci est proche - essayé en utilisant [transformations personnalisées] (https://github.com/Hearst-DD/ObjectMapper#custom-transforms) par exemple. '(Map [" valeur "], TransformOf (deJSON: {Float ($ 0!)}, ToJSON: {$ 0.map {Chaîne (format:"% # f ", $ 0)}})) '- le problème est ceci sérialiser comme une chaîne et est déduit comme une chaîne plutôt qu'un nombre par le point de terminaison de base de données –