Sto codificando una struttura mappa complessa con matrici di valori doppi. L'alta precisione non è importante e la dimensione dell'output è, quindi sto cercando di ottenere lo strumento JSON (Jackson in questo caso) per serializzare i valori double usando un DecimalFormat fornito.jackson - json codifica di doppi con precisione controllata
Quello che segue è il mio colpo migliore, ma questo viene a mancare, come il serializzatore non viene raccolto dal mapper oggetto per codificare l'array:
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));
}
}
L'output è:
{ "test" : [1.1111111111,1.315143204964E12}
Quello che stavo cercando:
{ "test": [1.32E12, 1.11E0]}
Tutte le idee?
Inoltre, non mi piace dover generare una stringa e scrivere è così semplice - è possibile inserire un oggetto StringBuffer in DecimalFormat per fare ciò?
Grazie