2017-05-03 6 views
0

シナリオ:渡されたjsonに基づいて型を推定するスキーマレスデータベースAPIがあります。ただし、データベースがスキーマを推論すると、同じテーブルに追加された後続のエントリはすべて、既存のスキーマに従わなければなりません。私はJson形式のデータをSwiftアプリケーションからRESTエンドポイントにプッシュしています。小数点以下を切り捨てずにSwiftの浮動小数点数にシリアル化

私は例えば、スウィフトアプリ内データのスキーマ/シリアル化を定義するためにObjectMapperを使用しています:

class ExampleDatum: Mappable { 

    value: Float? 

    init() { 
    } 

    required init?(map: Map) { 
    } 

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

問題は値が整数である場合には、JSONをリードする、小数点なしでフォーマットされていることを来ります

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

JSON、例えばこの種の情報を埋め込むためのベストプラクティスは何ですか:整数/浮動小数点数としてこのフィールドの一貫性のない解釈に小数点は常に含まれていますか?理想的には{"value": 5.0}

+0

を試してみてください。そのフレームワークのための指定されたinitiliazerは 'ExampleDatum(JSON:[String:Any])'です。そうすれば、フロートは組み込みのマッパーによって処理されます。多分あなたの問題を解決するだろうか? – Desdenova

+0

デフォルトのコンストラクタを忘れてしまいました。上のコード例で修正されています。しかし、ここでの問題は、floatからマップされたjsonへのシリアル化です。 –

答えて

0

のようなものは、私はこれもコンパイルされることsupprisedだ

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

これは、[カスタム変換](https://github.com/Hearst-DD/ObjectMapper#custom-transforms)を使用してクローズしています。 ($ 0)})))))))))を使用して、{0、}、{0}、{0、}、{0、 ' - この問題は、文字列としてシリアライズされ、データベースエンドポイントによって数値ではなく文字列として推測される –

関連する問題