2017-05-03 1 views
1

다음 JSON 입력이 JSON.parse 함수에서 구문 분석되지 않은 이유를 알아 냈습니다.JSON 백 슬래시로 구문 분석 오류가 발생했습니다.

{"World":"Hello\\Test"} 

위의 JSON은 JSON.NET에서 반환됩니다.

나는이 방법을 얻기 위해 여러 가지 방법을 시도했다. 보시다시피 백 슬래시가 이스케이프 처리되고 https://jsonlint.com/이 파싱 할 수 있습니다.

나는 https://jsfiddle.net/ckp0uc0p/3/에도 실패한 샘플이 있습니다.

도움이 될 것입니다.

+0

[jQuery JSON 구문 분석기가 백 슬래시에 이중 이스케이프가 필요한 이유는 무엇입니까?] (http://stackoverflow.com/questions/3807537/why-does-the-jquery-json-parser-need-double-escaping -for-backslashes) – Brennan

+0

불행히도 데이터를 제어하지 못합니다. 이 데이터가 해당 구성 요소에 의해 구문 분석되고 해당 방식으로 저장되는 것처럼 JSON.NET에 태그를 지정했습니다. – Hozikimaru

+0

게시 한 JSON이 유효합니다. 얼마나 정확하게 파싱하려고합니까? 귀하의 예제에서 볼 수 있듯이 JavaScript 소스에 실제로 문자열 리터럴로 삽입하고 있습니까? –

답변

2

자바 스크립트로 소스를 JSON을 주입하는 가장 좋은 방법 코드 (서버 측 언어로 자바 스크립트를 생성 할 때) 필요한 문자열 리터럴이 아닌 필요한 곳에 직접 삽입하는 것입니다 구문 분석 할 수 있습니다. 예를 들어

:

var foo = <json blob>; 

그래서 결과가 될 것

var foo = {"World":"Hello\\Test"}; 
자바 스크립트는 당신이 원하는 무엇인가 객체, 초래하는 객체 리터럴으로이 해석합니다

어쨌든 얻을. 이렇게하면 "중첩 된"이스케이프 시퀀스의 모든 문제가 방지됩니다.

2

표시하려는 모든 백 슬래시에 대해 두 개의 \\을 추가해야합니다. 당신이 JSON을 구문 분석하는 경우, 당신은 추가 할 필요가 2 백 슬래시를 표시 4.

// inside a string to be parsed as json 
 
var json = '{"World":"Hello\\\\Test"}' 
 
console.log(JSON.parse(json)) 
 

 
// directly in an object 
 
var object = {"World": "Hello\\Test"} 
 
console.log(object)

0

try 
 
{ 
 
    var res = '{"World":"Hello\\\\Test"}'; 
 
\t var s = JSON.parse(res); 
 
    console.log(JSON.stringify(s)); 
 
    
 
} catch(error) { 
 
\t alert(error); 
 
}

관련 문제