Зачем нужен 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 — локальная установка не требуется.