2010-05-27 9 views
1

내가 왜 백 슬래시를 추가 net.sf.json.JSONObject 알아 내려고 내 머리를 잃어버린거야 어디서해야하지 내 자바 코드에 :net.sf.json.JSONObject는 예상치 못한 곳에 백 슬래시를 추가합니까?

JSONObject obj = new JSONObject(); 
obj.element ("column_name", "<a href=\"#\" title=\"test\">Test !</a>"); 

출력됩니다 :

<a href=\"#\" title=\"test\">Test !<\/a> 

여분의 "\"는 </a> 근처에 있습니다.

이 동작을 어떻게 피할 수 있습니까?

답변

2

HTML 구문 규칙에 따라 문자 시퀀스 </이 포함되어 있지 않은 스크립트 블록 (<script ...> ... </script>)에 사용 된 JavaScript 문자열과 마찬가지로 JSON에서 문자열을 이스케이프 처리하는 데 동일한 방법이 사용됩니다.

이것은 당신에게 어떤 변화가 있습니까? "임의"문자를 이스케이프해도 JSON 또는 JavaScript에서 문자열 리터럴의 의미가 변경되지 않습니다. 문자열 리터럴 "/""\/" 기술적 절대적으로 동일하다

if ("/" === "\/") alert("The same!"); 

편집 : BTW는 JSON 문법 명시 적으로 탈출 할 수있는 문자로 슬래시 (상선)을 나열합니다.

+0

글쎄, 당신이 말한 것과 물론 당신이 옳았다는 것을 확인했기 때문에 이상하지만, 문제는 DOM의 HTML 값을 extjs (그리드)의 요소와 같은 테이블에 추가하는 것입니다. 열이 손상되었습니다 (데이터 요소가 헤더와 잘 정렬되지 않음). 잘못된 html에서 문제가 발견되었습니다. 나는 요청에 의해 반환 된 HTML을 검사하고, "\ /"를 제외하고는 다른 모든 것이 괜찮습니다. 매우 이상합니다. p 하지만 도움을 주셔서 감사합니다. –

+0

그러면 지금은 슬래시를 이스케이프 처리하는 것이 왜 문제를 일으키는 지 상상할 수 없기 때문에 더 자세한 정보를 제공해야합니다. 그러나 인용문을 이스케이프 처리하지는 않습니다. – RoToRa

+0

비슷한 문제가 있었지만 폴더 구조가있어서/folder_name은 \/folder_name (org.json을 사용하고 있습니다)이지만 파서 (cjson)는 문자열을 디코딩 한 후에 백 슬래시를 남겨 둡니다. 아래의 @ktbiz 접근 방식을 사용했지만 클라이언트 측에서 JSON 문자열을 보내기 전에 \/with/with를 바꿉니다. JSON 스키마가 승인되면 org.json toString() 코드의 버그라고 다른 곳에서 읽었지만 다른 JSON 파서 (내 경우 cjson)의 버그처럼 들립니다. –

2

이 문제도 발생했습니다. 문제는 내 코드가 org.json.JSONObject와 com.amazonaws.util.json.JSONObject를 모두 사용한다는 것이 었습니다. 이 둘 사이의 변환은 문자열과 이스케이프 문자를 생성하는 것이 었습니다. 당신이 net.sf.json.JSONObject를 사용하고 있다고 가정 할 때, 이것은 당신의 문제 일 수도 있습니다. 다른 버전의 JSONObject에 대한 가져 오기를 확인하십시오.

관련 문제