Робота з JSON: серіалізація та десеріалізація даних, взаємодія з веб-сервером

Нині ми живемо в епоху інформації, де величезні об’єми даних передаються туди-сюди між різними системами, сервісами і додатками. Щоб спростити цей процес, було створено формати даних, які сприяють легкому обміну та зберіганню інформації. Один з найпопулярніших таких форматів – JSON, або JavaScript Object Notation.

JSON – це текстовий формат даних, що використовується для передачі структурованих даних через веб. Він був введений як частина мови JavaScript, але на сьогоднішній день підтримується та активно використовується в більшості мов програмування. Велика кількість веб-API використовує JSON як формат обміну даними.

Ця стаття спрямована на детальне вивчення JSON, включаючи його основні концепції, методи серіалізації та десеріалізації даних, а також його роль у взаємодії з веб-сервером. Ми розглянемо практичні приклади використання JSON в різних мовах програмування, зокрема в JavaScript та Python, а також подивимося на створення простого веб-застосунку, який використовує JSON для обміну даними.

Основи JSON

JSON, або JavaScript Object Notation, — це формат даних, що базується на тексті й широко використовується для передачі даних у мережі. Він був розроблений з метою забезпечення універсального методу для обміну даними між клієнтською та серверною частиною веб-додатка, але на сьогодні використовується в різноманітних сферах, від баз даних до конфігураційних файлів.

Основна структура JSON заснована на двох типах структур даних: об’єктах і масивах.

Об’єкти в JSON представлені у вигляді пар ключ-значення, де ключ — це рядок, а значення може бути рядком, числом, булевим значенням, об’єктом, масивом або null. Об’єкти в JSON розташовуються в фігурних дужках {}.

Масиви в JSON — це упорядковані набори значень. Масиви в JSON обмежуються квадратними дужками [] і можуть містити значення будь-якого типу.

Ось приклад JSON-об’єкта:


{
  "name": "John Doe",
  "age": 30,
  "isEmployed": true,
  "hobbies": ["reading", "gaming", "coding"],
  "address": {
    "street": "123 Main St",
    "city": "Anytown",
    "state": "Anystate",
    "postalCode": "12345"
  }
}

Цей JSON-об’єкт представляє людину з ім’ям John Doe, якій 30 років, вона працює (isEmployed), має три захоплення (reading, gaming, coding) та проживає за конкретною адресою.

Використання JSON дозволяє нам працювати з цими даними в структурованому і зрозумілому форматі.

Приклад 1: JSON об’єкт з товаром


{
  "productId": "1234",
  "productName": "Football",
  "productCategory": "Sports",
  "price": 15.50
}

У цьому прикладі ми маємо товар з унікальним ідентифікатором (productId), назвою (productName), категорією (productCategory) та ціною (price).

Приклад 2: JSON об’єкт з масивом


{
  "students": [
    {
      "id": "1",
      "name": "John Doe",
      "age": 22,
      "major": "Computer Science"
    },
    {
      "id": "2",
      "name": "Jane Smith",
      "age": 23,
      "major": "Mathematics"
    }
  ]
}

У цьому прикладі ми маємо масив студентів, кожен з яких представлений у вигляді окремого JSON-об’єкта з інформацією про ідентифікатор (id), ім’я (name), вік (age) та основний предмет навчання (major).

Приклад 3: JSON об’єкт з вкладеними об’єктами


{
  "company": "Tech Co.",
  "address": {
    "street": "123 Main St",
    "city": "Anytown",
    "state": "Anystate",
    "postalCode": "12345",
    "coordinates": {
      "latitude": 35.6895,
      "longitude": 139.6917
    }
  }
}

У цьому прикладі ми маємо об’єкт компанії, який включає в себе інформацію про адресу компанії, яка сама є JSON-об’єктом. Адреса також включає координати, які представлені окремим JSON-об’єктом.

Робота з JSON в JavaScript

JavaScript має вбудований об’єкт JSON, який надає методи для роботи з даними у форматі JSON. Два ключові методи цього об’єкта, які використовуються для серіалізації та десеріалізації JSON, це JSON.stringify() та JSON.parse().

JSON.stringify()

JSON.stringify() використовується для перетворення JavaScript об’єкта в рядок JSON. Це процес, відомий як “серіалізація” об’єкта.

Ось як це працює на прикладі:


let student = {
  name: "John",
  age: 30,
  city: "New York"
};

let json = JSON.stringify(student);

console.log(json);
// виведе: {"name":"John","age":30,"city":"New York"}

У цьому прикладі об’єкт student перетворюється в рядок JSON за допомогою JSON.stringify(), і результат виводиться у консоль.

JSON.parse()

JSON.parse() використовується для перетворення рядка JSON назад в JavaScript об’єкт. Цей процес називається “десеріалізація”.

Ось як це працює:


let json = '{"name":"John","age":30,"city":"New York"}';

let student = JSON.parse(json);

console.log(student);
// виведе: { name: 'John', age: 30, city: 'New York' }

У цьому прикладі рядок JSON json перетворюється назад в JavaScript об’єкт за допомогою JSON.parse(), і результат виводиться у консоль.

Робота з JSON в Python

Python має вбудований модуль json, який надає методи для роботи з даними у форматі JSON. Два ключові методи цього модуля, які використовуються для серіалізації та десеріалізації JSON, це json.dumps() та json.loads().

json.dumps()

json.dumps() використовується для перетворення Python об’єкта в рядок JSON. Це процес, відомий як “серіалізація” об’єкта.

Ось як це працює на прикладі:


import json

student = {
  "name": "John",
  "age": 30,
  "city": "New York"
}

json_str = json.dumps(student)

print(json_str)
# виведе: {"name": "John", "age": 30, "city": "New York"}

У цьому прикладі словник student перетворюється в рядок JSON за допомогою json.dumps(), і результат виводиться.

json.loads()

json.loads() використовується для перетворення рядка JSON назад в Python об’єкт. Цей процес називається “десеріалізація”.

Ось як це працює:


import json

json_str = '{"name": "John", "age": 30, "city": "New York"}'

student = json.loads(json_str)

print(student)
# виведе: {'name': 'John', 'age': 30, 'city': 'New York'}

У цьому прикладі рядок JSON json_str перетворюється назад в Python словник за допомогою json.loads(), і результат виводиться.

Практичний приклад: взаємодія з веб-сервером за допомогою JSON

Використання JSON для обміну даними з веб-сервером – це одна з найпоширеніших ситуацій в розробці веб-застосунків. Давайте розглянемо простий приклад такого застосунку, який використовує JavaScript на клієнтській стороні та Python на серверній.

На стороні клієнта ви можете використовувати вбудований об’єкт fetch в JavaScript для відправки HTTP-запиту до сервера. Запит може містити дані в форматі JSON, які потім можна обробити на сервері.


fetch('https://localhost:5000/data', {
    method: 'POST',
    headers: {
        'Content-Type': 'application/json',
    },
    body: JSON.stringify({
        name: 'John',
        age: 30
    }),
})
.then(response => response.json())
.then(data => console.log(data));

У цьому прикладі ми відправляємо POST-запит до сервера на адресу https://localhost:5000/data. У тілі запиту ми передаємо об’єкт JSON, який містить інформацію про користувача. Потім ми очікуємо відповідь від сервера в форматі JSON, яку обробляємо та виводимо в консоль.

На стороні сервера ви можете використовувати Python фреймворк Flask для обробки вхідних запитів та відправки відповіді. Дані JSON, які прийшли з клієнта, можна десеріалізувати за допомогою request.get_json().


from flask import Flask, request, jsonify

app = Flask(__name__)

@app.route('/data', methods=['POST'])
def handle_data():
    data = request.get_json()
    print(data)  # виводить {'name': 'John', 'age': 30}
    return jsonify({'message': 'Data received successfully'}), 200

if __name__ == "__main__":
    app.run(port=5000)

У цьому прикладі ми створюємо Flask сервер, який слухає POST-запити на маршрут /data. Коли сервер отримує запит, він витягує дані JSON з запиту та виводить їх.

Підсумок

Ми докладно розглянули, що таке JSON, його основну структуру та призначення. Як ви могли помітити, JSON – це міцний фундамент для обміну даними в інтернеті. JSON об’єкти є легкими, гнучкими та легко зрозумілими, що робить їх ідеальним вибором для передачі даних між сервером та клієнтом.

Ми також розглянули, як використовувати JSON в таких популярних мовах програмування, як JavaScript і Python. Використання вбудованих функцій та методів для роботи з JSON дозволяє з легкістю серіалізувати та десеріалізувати дані, готові для передачі через мережу або зберігання на диску.

Ми взяли практичний приклад створення простого веб-застосунку, який використовує JSON для обміну даними між клієнтом та сервером. Цей приклад демонструє реальну ситуацію, з якою веб-розробники зустрічаються щодня, та показує, як знання JSON допомагає ефективно вирішувати ці задачі.

У сучасному світі веб-розробки неможливо переоцінити значення знання та вміння працювати з JSON. Будь-який веб-розробник, незалежно від його спеціалізації та досвіду, зіткнеться з необхідністю використовувати JSON на певному етапі своєї роботи. Тому поглиблене розуміння JSON і вміння ефективно з ним працювати є невід’ємною частиною набору навичок сучасного веб-розробника.

Site Footer