19

Gson を使用してゼロに近い double 値を含むオブジェクトをシリアル化すると、科学的な E 表記法が使用されます。

{"doublevaule":5.6E-4}

Gsonに生成するように指示するにはどうすればよいですか

{"doublevaule":0.00056}

代わりは?カスタム JsonSerializer を実装できますが、JsonElement が返されます。シリアル化方法を制御できない double を含む JsonPrimitive を返す必要があります。

ありがとう!

4

7 に答える 7

2

メソッドの拡張JsonWriterとオーバーライドを試すことができますvalue(double)

このように変更するように構築されているようには見えませんが (既存のコードを複製する必要があります)、動作させることは可能です。

残念ながら、出力形式に影響を与える理由は他にありません。

于 2012-06-20T12:21:11.500 に答える
2

のカスタム シリアライザーを作成します。Double

GsonBuilder gsonBuilder = new GsonBuilder();
gsonBuilder.registerTypeAdapter(Double.class,  new JsonSerializer<Double>() {
    @Override
    public JsonElement serialize(Double originalValue, Type typeOf, JsonSerializationContext context) {
        BigDecimal bigValue = BigDecimal.valueOf(originalValue);

        return new JsonPrimitive(bigValue.toPlainString());
    }
});

変更前: {"金額": 1.0E9}

変更後: {"金額": "1000000000"}

JSON の文字列であるため、完全ではありません。

于 2014-04-08T19:53:00.273 に答える
0

何らかの理由で、ここで多くの人が提案したように、BigDecimal を使用してソリューションを機能させることができません。だから私はそれを次のように書かなければなりませんでした:

.registerTypeAdapter(object : TypeToken<Double>() {}.type, object : JsonSerializer<Double> {
    override fun serialize(src: Double, typeOfSrc: Type, context: JsonSerializationContext): JsonElement =
        JsonPrimitive(src.toBigDecimal().toPlainString().toBigDecimal())
})
于 2020-12-23T12:47:39.837 に答える