double 값 배열을 갖는 복잡한 Map 구조를 인코딩합니다. 고정밀도가 중요하지 않고 출력 크기가 있으므로 제공된 DecimalFormat을 사용하여 double 값을 직렬화하기 위해 JSON 도구 (이 경우 Jackson)를 얻으려고합니다.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를 공급할 수 있습니까?
감사