2013-07-08 4 views
7

В JSON.stringify() функции JavaScript, я иногда вижу следующий синтаксис:Второй аргумент в JSON.stringify в JavaScript

JSON.stringify(obj, null, 4) 

Однако, я не могу получить то, что второй аргумент, null, должен делать. Пока я знаю, вышеупомянутая функция принимает объект в качестве своего первого аргумента и преобразует его в строковую переменную. Третий аргумент, 4 в этом случае, отступы и довольно-печатает результирующий строковый объект. Но я не вижу, что второй аргумент пытается сделать, даже после того, как я прочитал объяснение в официальном документе ... Так что же делает аргумент? Или это просто для того, чтобы принять третий аргумент? (Но я думаю, что тогда функция должна принимать как имя аргумента, так и его параметр, например, JSON.stringify(obj, space=4). Я не уверен, разрешен ли такой синтаксис в Javascript, так что простите меня, если это не так. знаю, что мое ожидание правильное, в первую очередь, так что хотелось бы задать вопрос в любом случае).

Спасибо.

ответ

7

Второй параметр может быть функцией для выполнения замены при подстановке.

A null или undefined Второй параметр означает,

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

Начиная с Firefox 3.5.4, JSON.stringify() предоставляет дополнительные возможности настройки за счет использования дополнительных параметров. Синтаксис является:

jsonString = JSON.stringify (значение [, Заменитель [пространство]])

значение объекта JavaScript, чтобы преобразовать в строку JSON.

Заменитель Функция, которая изменяет поведение процесса stringification или массив объектов Струнные и номер, которые служат в качестве белого списка для выбора свойств объекта значения, которые будут включены в строку JSON . Если это значение равно null или не указано, все свойства объекта включены в результирующую строку JSON.

space Объект String или Number, который используется для вставки пробела в выходной файл Строка JSON для удобства чтения. Если это номер, то указывает количество пробелов, которое должно использоваться как пробел; это число ограничено 10, если оно больше. Значения менее 1 указывают, что пространство не должно использоваться. Если это String, строка (или первые 10 символов строки, если она длиннее этого) используется как пробел. Если этот параметр не указан (или null), пробел не используется. Параметр replacer

Параметр replacer может быть либо функцией, либо массивом. Как функция , он принимает два параметра, ключ и значение . Объект, в котором был найден ключ, указан в качестве параметра этого параметра.Изначально он вызывается с пустой клавишей , представляющей объект, который стробируется, и затем он вызывается для для каждого свойства объекта или массива, стробированного. Он должен вернуть значение, которое должно быть добавлено в строку JSON следующим образом:

Если вы возвращаете номер, строка, соответствующая этот номер используется в качестве значения для свойства при добавлении в строку JSON. Если вы возвращаете строку, эта строка используется как значение свойства, когда добавляет ее в строку JSON. Если вы возвращаете логическое значение, «true» или «false» используется как значение свойства, при необходимости, при добавлении к строке JSON. Если вы возвращаете какой-либо другой объект, объект будет , рекурсивно стягированный в строку JSON, вызывая функцию-заменитель для каждого свойства, если только объект не является функцией, в которой случай ничего не добавляется в строку JSON. Если вы возвращаете undefined, свойство не входит в строку вывода JSON. Примечание. Вы не можете использовать функцию замены, чтобы удалить значения из массива. Если вы не указали , то вместо него используется значение null.

Пример

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}. 

Если Заменитель представляет собой массив, значения массива указывают имена свойств в объекте, которые должны быть включены в результирующий JSON строки.

Смежные вопросы