2014-10-17 3 views
5

나는 JSON.parse 는 개행 문자

'[{"Name":"Eggs","Complete":false,"Notes":"Notes here\n"},{"Name":"Sugar","Complete":false,"Notes":null}]' 

를 사용하여 JSON 문자열 다음 구문 분석하려고 페이지를하지만, 다음 코드는

var groceriesJson = JSON.parse(jsonString); 

"Uncaught SyntaxError: Unexpected token"가 그럼 난에 와서 오류를 준다 탈출 Json.Parse 그것 때문에 알고있는 그것의 \n json 문자열에. 그래서 나는 this solution을 시도했다. 그러나 운이 없다. 여전히 같은 오류 "Uncaught SyntaxError: Unexpected token"

function escapeSpecialChars(jsonString) { 

     return jsonString.replace(/\\n/g, "\\n") 
       .replace(/\\'/g, "\\'") 
       .replace(/\\"/g, '\\"') 
       .replace(/\\&/g, "\\&") 
       .replace(/\\r/g, "\\r") 
       .replace(/\\t/g, "\\t") 
       .replace(/\\b/g, "\\b") 
       .replace(/\\f/g, "\\f"); 

     } 

var groceriesJson = JSON.parse(escapeSpecialChars(jsonString)); 

아이디어가 있습니까? 감사합니다

--- UPDATE ---- 내가 수동으로이 문자열을 생성하고 있지 않다

, 나는 C#을에서 JSON 문자열을 생성 C#을 코드가 자바 스크립트 코드에 다음

var jss = new System.Web.Script.Serialization.JavaScriptSerializer(); 
var groceries = jss.Serialize(Model); 

오브젝트 I

var jsonString = '@Html.Raw(groceries)' 
var groceriesJson = JSON.parse(escapeSpecialChars(jsonString)); 
+3

JSON을 JavaScript에 문자열 리터럴로 포함하려는 이유는 무엇입니까? 그냥 배열 리터럴로 사용하고 수동 구문 분석 단계를 건너 뜁니다. – Quentin

+0

그게 작동합니다. 답변을 게시 할 수 있다면 답변으로 표시하겠습니다. 감사합니다 – sanjeev

답변

3

당신은 그냥 당신 JSON이되고 \\n에서와 \을 탈출해야합니다 있습니다 : 당신이 JSON에 액세스 할 수없는 경우

'[{"Name":"Eggs","Complete":false,"Notes":"Notes here\\n"},{"Name":"Sugar","Complete":false,"Notes":null}]'; 

, 다음 기능은 다음과 같아야합니다

function escapeSpecialChars(jsonString) { 

    return jsonString.replace(/\n/g, "\\n") 
     .replace(/\r/g, "\\r") 
     .replace(/\t/g, "\\t") 
     .replace(/\f/g, "\\f"); 

} 

var groceriesJson = JSON.parse(escapeSpecialChars(jsonString)); 
+0

나는 json 문자열을 수동으로 생성하지 않습니다. 내 질문을 업데이트했습니다. – sanjeev

0

@Quentin 당신이 리터럴 내부의 값을 저장 건너 뛰고 다음과 같이 뭔가를 할 수 있듯이 :

var jsonObject = @Html.Raw(groceries);