2013-07-08 25 views
7

In funzione di Javascript JSON.stringify(), io di tanto in tanto vedere la seguente sintassi:secondo argomento JSON.stringify in JavaScript

JSON.stringify(obj, null, 4) 

Tuttavia, non posso ottenere ciò che il secondo argomento, null, dovrebbe fare. Finché so, la funzione sopra riportata accetta un oggetto come primo argomento e lo converte in una variabile stringa. Il terzo argomento, 4 in questo caso, rientra e stampa in modo grazioso l'oggetto stringa risultante. Ma non riesco a vedere che cosa il secondo argomento cerca di fare anche dopo aver letto la spiegazione sul documento ufficiale ... Allora, cosa fa l'argomento? O è solo lì per accogliere il terzo argomento? (Ma penso che la funzione dovrebbe prendere sia il nome dell'argomento che il suo parametro, ad esempio, ad esempio, JSON.stringify(obj, space=4). Non sono sicuro che tale sintassi sia consentita in Javascript, quindi perdonami se non lo è. so che la mia aspettativa è corretta in primo luogo, quindi vorrei comunque fare una domanda).

Grazie.

risposta

7

Il secondo parametro può essere una funzione per eseguire la sostituzione durante la stringa.

A null o un secondo parametro non definito significa che si desidera utilizzare la stringificazione standard , senza alcuna personalizzazione.

Da https://developer.mozilla.org/en-US/docs/Using_native_JSON#The_replacer_pa

partire in Firefox 3.5.4, JSON.stringify() offre ulteriori funzionalità di personalizzazione attraverso l'utilizzo di parametri opzionali. La sintassi è:

jsonString = JSON.stringify (valore [, sostituto [spazio]])

valore l'oggetto JavaScript per convertire in una stringa JSON.

sostituto Una funzione che altera il comportamento del processo in stringa, o una matrice di stringa e numero di oggetti che servono come una lista bianca per selezionando il proprietà dell'oggetto valore da includere nella stringa JSON . Se questo valore è nullo o non fornito, tutte le proprietà di l'oggetto sono incluse nella stringa JSON risultante.

spazio Un oggetto stringa o numero utilizzato per inserire spazi bianchi nell'output stringa JSON a fini di leggibilità. Se questo è un numero, lo indica il numero di caratteri dello spazio da utilizzare come spazio bianco; questo numero è limitato a 10 se è più grande di quello. Valori inferiori a 1 indicano che non è necessario utilizzare spazio. Se si tratta di una stringa, la stringa (oi primi 10 caratteri della stringa, se è più lunga di quella) viene utilizzata come spazio bianco. Se questo parametro non viene fornito (o è null), non viene utilizzato alcuno spazio bianco. Il parametro replacer

Il parametro replacer può essere una funzione o una matrice. Come funzione , sono necessari due parametri, la chiave e il valore sono stati specificati. L'oggetto in cui è stata trovata la chiave viene fornito come sostituto questo parametro.Inizialmente viene chiamato con una chiave vuota che rappresenta l'oggetto da stringificare e quindi viene chiamato per ogni proprietà sull'oggetto o sull'array che viene sottoposto a stringa. Dovrebbe restituire il valore che deve essere aggiunto alla stringa JSON, come segue:

Se si restituisce un numero, la stringa corrispondente a quel numero è utilizzato come valore per la proprietà quando aggiunto alla stringa JSON. Se si restituisce una stringa, tale stringa viene utilizzata come valore della proprietà quando viene aggiunta alla stringa JSON. Se si restituisce un valore booleano, "true" o "false" viene utilizzato come valore della proprietà, a seconda dei casi, quando si aggiunge alla stringa JSON. Se si restituisce qualsiasi altro oggetto, l'oggetto è ricorsivamente stringa nella stringa JSON, chiamando la funzione replacer su ogni proprietà, a meno che l'oggetto non sia una funzione, in cui la stringa non viene aggiunta alla stringa JSON. Se si restituisce undefined, la proprietà non è inclusa nella stringa JSON di output. Nota: non è possibile utilizzare la funzione replacer per rimuovere i valori da una matrice. Se si restituisce undefined o una funzione, viene invece utilizzato null.

Esempio

function censor(key, value) { 
    if (typeof(value) == "string") { 
    return undefined; 
    } 
    return value; 
} 

var foo = {foundation: "Mozilla", 
      model: "box", 
      week: 45, 
      transport: "car", 
      month: 7}; 
var jsonString = JSON.stringify(foo, censor); 
The resulting JSON string is {"week":45,"month":7}. 

Se sostituto è un array, i valori della matrice indicano i nomi delle proprietà nell'oggetto che dovrebbero essere inclusi nella JSON stringa risultante.

Problemi correlati