JSON과의 직렬화/역 직렬화에 jackson 라이브러리를 사용하고 있습니다. 나는이 JSON이 가능한 한 가장 작은 크기를 가질 필요가 있기 때문에 ALLOW_UNQUOTED_FIELD_NAMES 기능을 사용하여 모든 따옴표를 제거했습니다. 따옴표를 지우는 것이 표준 json이 아니라는 것을 알고 있지만 json을 작게 만드는 것은 프로젝트의 어려운 요구 사항입니다. 생성 된 JSON 작동하지만, 나는 예외 받고있어 JSON 값을 읽으려고 한 경우 :jackon의 ALLOW_UNQUOTED_FIELD_NAMES JSON 라이브러리
org.codehaus.jackson.JsonParseException : 예기치 않은 문자 ('9'(코드 57)) : 은 문자 (따옴표 붙지 않는 이름) 또는 큰 따옴표 (인용)로 시작하여 필드 이름을 시작할 것으로 예상됩니다. [출처 : [email protected]; 라인 1, 컬럼 : 3]
I이 JSON 읽을 때 상기 예외가 발생
: I는 읽어
{90110a2e-febd-470f-afa4-cf7e890d31b9:0,eec652ad-a4d9-4eb1-8d24-7c1a0c29449f:1}
방법은 :
Map<String, Object> valuesMap = oM.readValue(json, new TypeReference<Map<String, Object>>() {});
대상물 값을 읽고 쓰는 데 사용하는 매퍼는 다음과 같습니다.
private static final ObjectMapper om = new ObjectMapper();
static {
om.configure(JsonGenerator.Feature.QUOTE_FIELD_NAMES, false);
om.configure(JsonParser.Feature.ALLOW_UNQUOTED_FIELD_NAMES, true);
om.configure(SerializationConfig.Feature.WRITE_DATES_AS_TIMESTAMPS, true);
om.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false);
om.getSerializationConfig().setSerializationInclusion(JsonSerialize.Inclusion.NON_NULL);
}
나는 발신자와 수신자 프로젝트 모두에서 Jackson의 1.6.3 버전을 사용하고 있습니다. 이 기능에 필요한 버전은 1.2+입니다. 그래서이 버전을 사용하지 않고 아마도 리시버가 Spring 어플리케이션이고 libs 폴더에 설치된 라이브러리가 1.6.3인지 확인했습니다.
내가 뭘 잘못하고 있니? 지도와 함께이 기능을 사용할 수없는 경우 일 수 있습니다.
다른 질문이 있습니다. 지금까지는 키가 uuid 값이고 값이 숫자 인지도를 보내고 있습니다. ALLOW_UNQUOTED_FIELD_NAMES 기능이있는 특수 문자로 값을 보내면 문제가 생길 수 있습니까? 잭슨이이 캐릭터를 피할 것입니까?
감사합니다.
스마일에 대한 좋은 점 - 특히 컴팩트 할 수 있습니다. 문자열 값 뒷쪽 참조를 사용할 때 (열거 된 값과 같은 반복 된 문자열 값이 많은 경우) – StaxMan