0Pricing
Lua Academy · 课时

为什么使用 JSON

数据交换基础。

为什么使用 JSON 是 CoddyKit 上的免费 Lua Academy 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Lua Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Lua Academy 课程共包含 4 节课。

什么是 JSON

JSON(JavaScript 对象表示法)是一种用于存储和交换数据的轻量级文本格式。它易于人类阅读,并且与编程语言无关。

几乎所有网络接口、配置文件和数据库都支持 JSON。学习在 JSON 与 Lua 表之间进行转换,可以让您的脚本与外部世界通信。

JSON 看起来像 Lua

JSON 对象使用花括号表示键值对,数组使用方括号表示。这几乎可以直接映射到 Lua 表。

JSON 对象会变成使用字符串键的 Lua 表;JSON 数组会变成使用从 1 开始的数字索引的 Lua 表。

-- 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 库

您可以使用 require 加载 JSON 库,就像加载其他 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 文本时,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 支持一组较小的数据类型:字符串、数字、布尔值、null、对象和数组。

Lua 会将它们映射为字符串、数字、布尔值、nil 和表。请注意,JSON 的 null 没有完全对应的 Lua 等价物,这可能会带来意外情况。

为什么使用 JSON 而不是自定义格式

您当然可以自行设计文本格式,但 JSON 已经得到各处支持。编辑器可以高亮它,验证器可以检查它,其他语言也能立即解析它。

使用 JSON 可以让数据更易移植,也让代码更容易调试。

常见使用场景

调用 REST 接口、读取配置文件、缓存结果或在进程之间传递数据时,您都会用到 JSON。

每种情况下的模式都相同:将传入的 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

快速检查

请测试您对 Lua 中 JSON 基础知识的理解。

回顾

JSON 是一种通用数据格式,可以顺畅地映射到 Lua 表。标准 Lua 没有 JSON 支持,因此您需要加载 dkjson 或 cjson 之类的库。

两个核心操作是 json.decode(将字符串转换为表)和 json.encode(将表转换为字符串)。接下来,您将详细学习如何将 JSON 解码为表。

常见问题解答

「为什么使用 JSON」课时是免费的吗?

是的 — 「为什么使用 JSON」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Lua Academy 课程的其余内容,请升级到 CoddyKit PRO。 Lua Academy 课程共包含 4 节课。

「为什么使用 JSON」这节课中我会学到什么?

数据交换基础。 你通过在浏览器中直接运行的动手代码来练习 Lua Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Lua Academy 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Lua Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。

「为什么使用 JSON」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Lua Academy 课中编写并运行代码吗?

能。每节 Lua Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 为什么使用 JSON
  2. 将 JSON 解码为表
  3. 将表编码为 JSON
  4. 处理嵌套数据
← 返回 Lua Academy