Джексон - JSON Кодирование удваиваний с контролируемой точностью

Я кодирующую сложную структуру карты с массивами двойных значений. Высокая точность не важно, и размер выхода - это, поэтому я пытаюсь получить инструмент JSON (Jackson в этом случае) для сериализации двойных значений с использованием предоставленного десятичной программы.

Ниже мой лучший выстрел, но это терпит неудачу, поскольку сериализатор не выбран объект Mapper для кодирования массива:

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}

Что я искал:

{«Test»: [1.32E12, 1.11e0]}

Любые идеи?

Кроме того, мне не нравится, чтобы сгенерировать строку, и писать так же RAW - находится там я мог кормить StringBuffer в в DecimalFormat сделать это

Спасибо

5
задан user927590 4 September 2011 в 13:41
поделиться