0Pricing
Lua Academy · Урок

Зачем нужен JSON

Основы обмена данными.

«Зачем нужен JSON» — бесплатный урок Lua Academy на CoddyKit. Это урок 1 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Lua Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Lua Academy содержит 4 уроков всего.

Что такое JSON?

JSON (объектная нотация JavaScript) — лёгкий текстовый формат для хранения и обмена данными. Он удобен для чтения человеком и не зависит от языка программирования.

Почти каждый веб-API, файл конфигурации и база данных работает с JSON. Умение преобразовывать JSON в таблицы Lua и обратно позволяет Вашим скриптам взаимодействовать с внешним миром.

JSON похож на Lua

Объекты JSON используют фигурные скобки с парами ключ-значение, а массивы — квадратные скобки. Это почти идеально соответствует таблицам Lua.

Объект JSON превращается в таблицу Lua со строковыми ключами, а массив JSON — в таблицу Lua с числовыми индексами, начинающимися с 1.

-- JSON text
-- {"name": "Ada", "age": 36}

-- Equivalent Lua table
local person = { name = "Ada", age = 36 }
print(person.name)

В Lua нет встроенной поддержки JSON

В отличие от некоторых языков, стандартная Lua не поставляется с поддержкой JSON. Вам потребуется библиотека.

Два наиболее распространённых варианта — dkjson (чистая Lua, простая установка) и lua-cjson (быстрая библиотека на C). Обе предоставляют функции encode и decode.

Загрузка библиотеки JSON

Загрузите библиотеку JSON с помощью require, как любой другой модуль Lua. Возвращаемая таблица содержит необходимые функции.

Здесь мы загружаем dkjson и привязываем его к локальной переменной с именем json.

local json = require("dkjson")
-- now json.encode and json.decode are ready

Две основные операции

С JSON Вы выполняете всего две операции: decode и encode.

Декодирование превращает строку JSON в таблицу Lua, которую можно прочитать. Кодирование превращает таблицу Lua обратно в строку JSON, которую можно отправить или сохранить.

local json = require("dkjson")
local t = json.decode('{"ok": true}')  -- string -> table
local s = json.encode(t)                -- table -> string

Пример декодирования

Когда Вы получаете текст JSON из файла или API, json.decode разбирает его в пригодную для использования таблицу Lua.

После декодирования обращайтесь к полям с помощью обычного синтаксиса Lua.

local json = require("dkjson")
local text = '{"city": "Oslo", "temp": 7}'
local data = json.decode(text)
print(data.city, data.temp)

Пример кодирования

Чтобы создать JSON, заполните таблицу Lua и передайте её в json.encode. Результатом будет строка, готовая для записи или передачи.

local json = require("dkjson")
local book = { title = "Lua", pages = 328 }
local text = json.encode(book)
print(text)

Типы данных JSON

JSON поддерживает небольшой набор типов: строки, числа, логические значения, нулевые значения, объекты и массивы.

Lua преобразует их в строки, числа, логические значения, nil и таблицы. Обратите внимание: JSON null не имеет полного эквивалента в Lua, что может привести к неожиданностям.

Почему JSON лучше собственных форматов

Вы можете придумать собственный текстовый формат, но JSON уже поддерживается повсюду. Редакторы подсвечивают его синтаксис, средства проверки проверяют его, а другие языки сразу разбирают его.

Использование JSON делает данные переносимыми, а код — более удобным для отладки.

Распространённые случаи применения

Вы будете использовать JSON при обращении к REST API, чтении файлов конфигурации, кэшировании результатов или передаче данных между процессами.

Во всех случаях схема одна и та же: декодируйте входящий JSON в таблицу, работайте с ней, а затем при необходимости снова закодируйте её для передачи.

local json = require("dkjson")
-- typical round trip
local data = json.decode(incoming)
data.seen = true
local out = json.encode(data)

Обработка ошибок декодирования

Декодирование может завершиться неудачно, если текст не является корректным JSON. dkjson возвращает значение, позицию и сообщение об ошибке вместо аварийного завершения.

Всегда проверяйте, равно ли nil первое возвращаемое значение, прежде чем использовать его.

local json = require("dkjson")
local data, pos, err = json.decode("{bad")
if not data then
  print("Invalid JSON:", err)
end

Быстрая проверка

Проверьте, насколько хорошо Вы усвоили основы JSON в Lua.

Итоги

JSON — универсальный формат данных, который легко преобразуется в таблицы Lua. В стандартной Lua нет поддержки JSON, поэтому загрузите библиотеку вроде dkjson или cjson.

Две основные операции — json.decode (из строки в таблицу) и json.encode (из таблицы в строку). Далее Вы подробно рассмотрите декодирование JSON в таблицы.

Часто задаваемые вопросы

Урок «Зачем нужен JSON» бесплатный?

Да — полный текст урока «Зачем нужен JSON» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Lua Academy, подпишись на CoddyKit PRO. Курс Lua Academy содержит 4 уроков всего.

Чему я научусь в уроке «Зачем нужен JSON»?

Основы обмена данными. Ты практикуешь Lua Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Lua Academy?

Предыдущий опыт не требуется. Lua Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 1 из 4.

Сколько времени занимает урок «Зачем нужен JSON»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Lua Academy?

Да. Каждый урок Lua Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Зачем нужен JSON
  2. Декодирование JSON в таблицы
  3. Кодирование таблиц в JSON
  4. Работа с вложенными данными
← Назад к Lua Academy