Перевод статьи JSON.parse() and JSON.stringify().

Глобальный объект JSON, доступный во всех современных браузерах, имеет два весьма полезных метода для работы с текстовым содержимым в формате JSON: parse и stringify. Так метод JSON.parse() принимает строку с данными в JSON формате и преобразует ее в объект JavaScript. Метод JSON.stringify() принимает объект JavaScript и преобразует его в строку JSON.

Например:

const myObj = {
  name: 'Skip',
  age: 2,
  favoriteFood: 'Steak'
};

const myObjStr = JSON.stringify(myObj);

console.log(myObjStr);
// "{"name":"Skip","age":2,"favoriteFood":"Steak"}"

console.log(JSON.parse(myObjStr));
// Object {name:"Skip",age:2,favoriteFood:"Steak"}

И хотя в настоящем примере указанные методы используются для работы с объектами, они также могут использоваться с массивами:

const myArr = ['bacon', 'letuce', 'tomatoes'];

const myArrStr = JSON.stringify(myArr);

console.log(myArrStr);
// "["bacon","letuce","tomatoes"]"

console.log(JSON.parse(myArrStr));
// ["bacon","letuce","tomatoes"]

JSON.parse()

Метод JSON.parse() может принимать второй аргумент: некоторую функцию reviver, которая будет применяться ко всем значениям объекта до того, как он будет возвращен.

В этом примере значения объекта, возвращаемого методом parse, если они являются строкой, будут преобразованы в верхний регистр:

const user = {
  name: 'John',
  email: '[email protected]',
  plan: 'Pro'
};

const userStr = JSON.stringify(user);

JSON.parse(userStr, (key, value) => {
  if (typeof value === 'string') {
    return value.toUpperCase();
  }
  return value;
});

// вернёт --> 
// Object {
//  email: "[email protected]",
//  name: "JOHN",
//  plan: "PRO"
//}

Замыкающие запятые недопустимы в JSON, поэтому выполнение кода, использующего метод JSON.parse() выбрасывает исключение, если переданная ему строка имеет замыкающие запятые.

JSON.stringify()

Метод JSON.stringify() может принимать два дополнительных аргумента, первый некоторая функция replacer , которая по аналогии с методом JSON.parse() будет применяться ко всем значениям объекта перед преобразованием его в JSON-строку.

Второй аргумент значение типа String или Number используется для вставки пробелов в выходную строку JSON для удобства чтения. Если это числовое значение, то оно задает количество пробелов перед каждым преобразованным свойством. Числовое значение ограничено значением 10, если оно больше, то значение равно 10, значения меньше 1 указывают на то, что пространство не должно использоваться. Если в качестве значения используется строка, то она используется в качестве пробела. Количество символов в строке ограничено числом 10, если оно больше, то строка усекается до десяти символов. Если этот параметр не указан, или его значение равно null, то дополнительные пробелы не используются.

const user = {
  id: 229,
  name: 'John',
  email: '[email protected]'
};

function replacer(key, value) {
  console.log(typeof value);
  if (key === 'email') {
    return undefined;
  }
  return value;
}

const userStr = JSON.stringify(user, replacer);
// "{"id":229,"name":"John"}"

Следующий пример с переданным аргументом пробела:

const user = {
  name: 'John',
  email: '[email protected]',
  plan: 'Pro'
};

const userStr = JSON.stringify(user, null, '...');
// "{
// ..."name": "John",
// ..."email": "[email protected]",
// ..."plan": "Pro"
// }"

Оставить комментарий