Я кодирующую сложную структуру карты с массивами двойных значений. Высокая точность не важно, и размер выхода - это, поэтому я пытаюсь получить инструмент 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 сделать это
Спасибо