2013-03-26 3 views
1

Jackson JSON 프로세서 라이브러리의 writeNumber() 메서드에서 불일치가 발견되었습니다. QUOTE_NON_NUMERIC_NUMBERS를 유효하게 해, "NaN"로 writeNumber (String)를 호출하면, 인용 된 캐릭터 라인이 돌려 주어지지 않습니다. 이는 다음 예제에서 설명 :Jackson : 숫자가 아닌 숫자의 불일치를 인용 함

float nan = Float.NaN; 
try { 
    JsonGenerator jg = new JsonFactory().createGenerator(System.out); 
    jg.enable(JsonGenerator.Feature.QUOTE_NON_NUMERIC_NUMBERS); 

    // writeNumber(String s) 
    jg.writeNumber(""+nan); 

    // writeNumber(float f) 
    jg.writeNumber(nan); 

    jg.close(); 
} catch (IOException e) { 
    throw new RuntimeException(e); 
} 

실제 출력 :

NaN "NaN" 

예상 출력 :

"NaN" "NaN" 

이 예상되는 동작이나 버그인가?

답변

1

겉으로보기에는 직관적이지 않더라도 예상되는 동작입니다. 이것은 JSON 사양의 숫자에 대한 엄격한 정의와 Java가 가지고있는 잠재적으로 제한이없는 숫자 세트의 결합 때문입니다. 안전하고 편리하게 일치시키기는 어렵습니다.

첫 번째 경우 원하는 서식을 사용하여 "원시"번호를 인쇄하고 있습니다. 결과는 유효한 JSON 번호로 간주되므로 인용 부호가 추가되지 않습니다. 큰 따옴표를 원하면 추가하십시오. 이것은 명시 적으로 값 쓰기라는 점을 제외하고는 writeRaw()과 유사합니다. 즉 필요한 구분 기호 (배열의 쉼표, 속성 이름과 값 사이의 세미콜론)가 추가됩니다.

두 번째 경우에는 출력 할 값이 유효한 JSON 번호가 아니며 JSON 문자열로 인쇄해야합니다.

관련 문제