为什么使用 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 反馈 — 无需本地设置。
此课程中的所有课时
- 为什么使用 JSON
- 将 JSON 解码为表
- 将表编码为 JSON
- 处理嵌套数据