2014-10-17 16 views
5

Ho una pagina in cui sto cercando di analizzare seguente stringa JSON utilizzando JSON.parseJSON.parse sfuggire caratteri di nuova riga

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

Ma seguente codice dà l'errore "Uncaught SyntaxError: Unexpected token"

var groceriesJson = JSON.parse(jsonString); 

Poi sono venuto a so che è a causa di \n in stringa json. Così ho provato this solution. Ma senza fortuna. Ancora lo stesso errore "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)); 

Qualche idea? Grazie

--- UPDATE ----

io non sono la creazione di questa stringa manualmente, ho c codici # che crea stringa JSON da C# oggetti

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

poi in javascript codici I hanno

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

Perché stai cercando di incorporare JSON come stringa letterale nel tuo JavaScript? Basta usarlo come un array letterale e saltare la fase di analisi manuale. – Quentin

+0

Funziona. Lo contrassegnerò come risposta se puoi postare una risposta. Grazie – sanjeev

risposta

3

Si dovrebbe solo sfuggire alla \ come in \\n, il vostro JSON divenire:

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

Se non si può avere accesso al JSON, allora la vostra funzione dovrebbe essere:

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

Non sto creando manualmente la stringa JSON. Ho aggiornato la mia domanda. – sanjeev

0

Come @Quentin suggerisce si può saltare la memorizzazione del valore all'interno del letterale e semplicemente fare qualcosa del genere:

var jsonObject = @Html.Raw(groceries); 
Problemi correlati