java - error - json 작은따옴표




Jackson은 JSON에서 따옴표를 이스케이프 처리하지 않습니다. (2)

Java에서 자바 스크립트 파일에 json을 넣으려고하지만 문자열에 json을 쓰면 문자열이 javascript의 유효한 json으로 표시되지 않습니다. 그것은 어떤 탈출을 놓치고있다. (이것은 json으로 문자열에서 발생합니다.이 json은 가짜 json으로 포맷되었습니다.)

예를 들어, 내 자바 스크립트 파일에 유효한 json 것입니다.

{
   "message": 
   "the following books failed: [{\"book\": \"The Horse and his Boy\",\"author\": \"C.S. Lewis\"}, {\"book\": \"The Left Hand of Darkness\",\"author\": \"Ursula K. le Guin\"}, ]"
}

여기에 이중 따옴표가 이스케이프되지 않는 곳이 있습니다.

{
   "message": 
   "The following books failed: [{"book": "The Horse and his Boy","author": "C.S. Lewis"}, {"book": "The Left Hand of Darkness","author": "Ursula K. le Guin"}, ]"
}

이 작업을 수행 할 때 두 번째 결과가 나타납니다.

new ObjectMapper().writer().writeValueAsString(booksMessage);

그러나 잭슨 (Jackson)과 파일을 직접 작성하면 좋은 결과를 얻을 수 있습니다.

new ObjectMapper().writer().writeValue(fileToWriteTo, booksMessage);

그렇다면 왜 잭슨은 파일에 쓸 때 다르게 벗어날 수 있습니까? 어떻게 문자열로 쓸 때 나를 위해 그렇게 탈출하게 할 수 있습니까?


나는 추가했다.

booksJson = Pattern.compile("\\\\").matcher(booksJson).replaceAll("\\\\\\\\");

모든 이스케이프 문자를 이스케이프 처리합니다. 그런 식으로 파일에 쓸 때 이스케이프가 제거되면 내가 필요한 이스케이프가 생깁니다. 그래서 내 진짜 질문은 자바 이스케이프를 제거하지 않고 파일에 쓰는 방법이었다.


나는 파티에 매우 늦었지만 비슷한 문제에 직면했으며 잭슨이나 나의 데이터에 문제가 없다는 것을 깨달았습니다. 그것은 자바였습니다. JSON 파일에서 읽은 다음 템플릿 HTML 파일에 쓰려고했습니다.

나는 당신과 같은 JSON을 만들었습니다.

{"field" : "This field contains what looks like another JSON field: {\"abc\": \"value\"}"}

그리고 위 문자열을 문자열에 썼을 때 abc와 value의 따옴표 앞에 백 슬래시가 사라졌습니다. String.replace에 대한 문맥 도움말이 Matcher.quoteReplacement에 대해 언급 한 것을 확인했습니다. 나는 이것에서 출발했다 :

template = template.replaceAll("%template%", jsonDataString);

이에:

Pattern pattern = Pattern.compile("%template%");
Matcher matcher = Pattern.matcher(template);
matcher.replaceAll(matcher.quoteReplacement(jsonDataString));

문제 해결됨.

Matcher.quoteReplacement







jackson