Введение

Нотация объектов JavaScript (JSON) — это облегченный формат обмена данными, который легко читать и писать людям, а машинам легко анализировать и генерировать. В этом сообщении блога мы рассмотрим различные способы работы с JSON в JavaScript, включая синтаксический анализ, преобразование в строки и некоторые продвинутые методы.

Основы JSON

JSON — это текстовый формат, полностью независимый от языка, но использующий соглашения, знакомые программистам языков семейства C, включая C, C++, C#, Java, JavaScript, Perl, Python и многие другие. JSON представляет простые структуры данных и объекты с помощью пар ключ-значение, также известных как «объекты» в JavaScript.

Простой объект JSON выглядит так:

{
  "firstName": "John",
  "lastName": "Doe",
  "age": 30,
  "isStudent": false
}

Разбор JSON

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

const jsonString = '{"firstName":"John","lastName":"Doe","age":30,"isStudent":false}';
const jsonObject = JSON.parse(jsonString);

console.log(jsonObject.firstName); // Output: John

Строка JSON

И наоборот, если мы хотим преобразовать объект JavaScript в строку JSON, мы можем использовать метод JSON.stringify():

const jsonObject = {
  firstName: "John",
  lastName: "Doe",
  age: 30,
  isStudent: false
};

const jsonString = JSON.stringify(jsonObject);

console.log(jsonString); // Output: '{"firstName":"John","lastName":"Doe","age":30,"isStudent":false}'

Получение JSON из API

Во многих случаях вам потребуется получать данные JSON из API. Функция fetch() используется для выполнения сетевых запросов и обработки ответов в JavaScript:

fetch("https://api.example.com/data")
  .then((response) => response.json())
  .then((data) => console.log(data))
  .catch((error) => console.error("Error fetching data:", error));

Расширенные методы JSON

Настройка JSON.parse() с функцией оживления

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

const jsonString = '{"firstName":"John","lastName":"Doe","age":30,"isStudent":false}';

const jsonObject = JSON.parse(jsonString, (key, value) => {
  if (key === "age" && value < 18) {
    return "minor";
  }
  return value;
});

console.log(jsonObject); // Output: { firstName: 'John', lastName: 'Doe', age: 30, isStudent: false }

Настройка JSON.stringify() с помощью функции замены

Точно так же вы можете использовать функцию-заменитель в качестве второго аргумента для JSON.stringify(), чтобы изменить процесс стробирования:

const jsonObject = {
  firstName: "John",
  lastName: "Doe",
  age: 30,
  isStudent: false
};

const jsonString = JSON.stringify(jsonObject, (key, value) => {
  if (key === "age" && value < 18) {
    return "minor";
  }
  return value;
});

console.log(jsonString); // Output: '{"firstName":"John","lastName":"Doe","age":30,"isStudent":false}'

Работа с JSON и промисами

При работе с асинхронным кодом, например при получении данных JSON из API, обычно используются промисы. Вот пример того, как обернуть функцию парсинга JSON промисом:

function parseJsonAsync(jsonString) {
  return new Promise((resolve, reject) => {
    try {
      const result = JSON.parse(jsonString);
      resolve(result);
    } catch (error) {
      reject(error);
    }
  });
}

const jsonString = '{"firstName":"John","lastName":"Doe","age":30,"isStudent":false}';

parseJsonAsync(jsonString)
  .then((jsonObject) => console.log(jsonObject))
  .catch((error) => console.error("Error parsing JSON:", error));

Заключение

В этом сообщении блога мы рассмотрели различные аспекты работы с JSON в JavaScript, от основ анализа и преобразования JSON в строки до извлечения данных из API и передовых методов. Поняв эти концепции, вы будете хорошо подготовлены для работы с данными JSON в своих проектах JavaScript.

  1. Руководство Mozilla Developer Network по JSON
  2. Веб-документы MDN по JSON.stringify()

Понравилось читать? Еще не являетесь участником Medium? Вы можете поддержать мою работу напрямую, зарегистрировавшись по моей реферальной ссылке здесь. Это быстро, просто и не требует дополнительных затрат. Спасибо за вашу поддержку!