2013-07-05 9 views
12

Sono un principiante al documento JSON, questo è il mio codice quindi per favore aiutami a risolvere questo errore.Come risolvere JSON.parse: carattere di controllo errato nella stringa letterale, in questo codice

{ 
    "_id" : "_design/utilisateur", 
    "_rev" : "1-967a00dff5e02add41819138abb3284d", 
    "views" : { 
    "tous" : { 
     "map" : "function(doc){if (doc.role=='utilisateur') {emit (doc._id,  [['t0',doc.distancet0],['t1',doc.distancet1],['t2',doc.distancet2],['t3',doc.distancet3], ['t4',doc.distancet4]])}}" 
     }, 

    "3500" : { 
     "map" : "function(doc) {if (doc.role=='utilisateur' &&  doc.distancet0<3500) {emit(doc._id,doc.distancet0)}}" 
     }, 

     "distancetot" : { 
       "map" : "function(doc) {var somme= Math.abs(doc.distancet0- doc.distancet1); if(doc.role=='utilisateur'){ 
    emit(doc._id, somme); 
}}" 
          }  
}   

} 
+3

Sembra che sia necessario rendere valido il proprio JSON. Non capisci il messaggio di errore? L'errore dovrebbe anche dirti dove succede. Se vuoi aiuto, mostraci il tuo documento JSON. – Bergi

+2

Mostraci il tuo codice? –

+0

Le domande relative ai problemi con il codice che hai scritto devono ** descrivere il problema specifico ** e includere un codice valido per riprodurlo. Vedi [SSCCE.org] (http://sscce.org/) come guida. –

risposta

32

Il messaggio di errore ti dice che hai un carattere di controllo all'interno di una stringa letterale, per esempio, il codice di caratteri a 8 o 10 o 13 o qualsiasi cosa al di sotto 32 (uno spazio).

The JSON definition ci dice che non si può avere caratteri di controllo letterali in letterali stringa, è necessario utilizzare una sequenza di escape, come \b, \r, \n, o \uXXXX dove XXXX è un codice esadecimale per un "punto di codice" Unicode (carattere) .

Così, per esempio, finta il seguente è in un file (o altro flusso di dati):

{ 
    "property": "value with an invalid 
control character in it" 
} 

Questo è valida JSON, la stringa letterale a cominciare "value ha almeno un carattere di controllo in essa (la linea break, potrebbe essere uno o due caratteri di controllo a seconda del sistema operativo).

Questo è come vorremmo risolvere il problema:

{ 
    "property": "value with an valid\nescape sequence in it" 
} 

Annotare la \n in cui l'interruzione di riga di una volta.

È possibile utilizzare http://jsonlint.com per convalidare JSON, è abbastanza buono per indicare dove si trova l'errore.


Re tua modifica: E 'davvero un'interruzione di linea che causa il problema:

"distancetot": { 
    "map": "function(doc) {var somme= Math.abs(doc.distancet0- doc.distancet1); if(doc.role=='utilisateur'){ 
Error is here -------------------------------------------------------------------------------------------------^ 

L'interruzione di riga dopo if(doc.role=='utilisateur'){ è un carattere di controllo valido, proprio come nel mio esempio di cui sopra.

+0

grazie che è stato utile, è valido ora :) – user2553396

+0

fatto, sei molto generoso – user2553396

Problemi correlati