私はdouble値の配列を持つ複雑なMap構造体をエンコードしています。 高精度は重要ではなく、出力サイズは、JSONツール(この場合はJackson)を取得して、提供されたDecimalFormatを使用してdouble値をシリアル化しようとしています。jackson-json制御精度を持つdouble型の符号化
次は私の最高のショットですが、シリアライザはオブジェクトマッパーによって選ばれていないとして、これは、配列をコード化するために失敗します。
class MyTest
{
public class MyDoubleSerializer extends JsonSerializer<double[]>
{
public void serialize(double[] value, JsonGenerator jgen, SerializerProvider provider) throws IOException, JsonProcessingException
{
for (double d : value)
{
jgen.writeStartArray();
jgen.writeRaw(df.format(d));
jgen.writeEndArray();
}
}
}
@Test
public void test1() throws Exception
{
ObjectMapper mapper = new ObjectMapper();
SimpleModule module = new SimpleModule("MyModule", new Version(0, 1, 0, "alpha"));
module.addSerializer(double[].class, new MyDoubleSerializer());
mapper.registerModule(module);
Map<String, Object> data = new HashMap<String, Object>();
double[] doubleList = { 1.1111111111D, (double) (System.currentTimeMillis()) };
data.put("test", doubleList);
System.out.print(mapper.writeValueAsString(data));
}
}
出力は次のとおりです。
{「テスト」 :[1.1111111111,1.315143204964E12}
私が探していた何
:
{ "テスト":[1.32E12、1.11E0]}
任意のアイデア?
また、私はStringを生成する必要はなく、書き込みは生のままです - これを行うには、DecimalFormatにStringBufferを渡すことができますか?
おかげダブル用ビルトインシリアライザからの借入により、これを解決するために管理