alert(JSON.encode(gridData));

本文介绍了如何使用Json.Encode()和Json.Decode()方法进行数据对象与JSON格式字符串之间的转换。Json.Encode()用于将数据对象转换为JSON格式的字符串,而Json.Decode()则用于将JSON格式的数据转换回数据对象。

alert(JSON.encode(gridData));

查看数据、对象、数组等复杂类型数据

详见:http://www.w3school.com.cn/json/

简单解释:

Json.Encode(object)

将数据对象转换为 JavaScript 对象表示法 (JSON) 格式的字符串。
Json.Decode(string)
将 JavaScript 对象表示法 (JSON) 格式的数据转换为数据对象。

 

在 Lua 脚本中,`json.encode()` 和 `json.decode()` 是用于 **JSON 数据与 Lua 数据结构之间相互转换** 的核心函数。它们不属于 Lua 标准库,而是由第三方 JSON 库(如 `cjson`、`dkjson` 等)提供。 最常用的是 `lua-cjson` 库,它高效且广泛用于 OpenWrt、Nginx + Lua (OpenResty)、NodeMCU 等环境。 --- ### ✅ `json.encode()` —— 将 Lua 数据结构编码为 JSON 字符串 #### 作用: 将 Lua 中的 table、字符串、数字、布尔值等数据转换成标准的 **JSON 格式字符串**,便于存储或传输。 #### 示例代码: ```lua local cjson = require("cjson") local data = { name = "Alice", age = 30, is_student = false, scores = {85, 92, 78}, address = nil -- JSON 中会变成 null } local json_str = cjson.encode(data) print(json_str) ``` #### 输出结果: ```json {"name":"Alice","age":30,"is_student":false,"scores":[85,92,78],"address":null} ``` > 💡 注意:`nil` 在 Lua table 中会被编码为 JSON 的 `null`。 --- ### ✅ `json.decode()` —— 将 JSON 字符串解码为 Lua 数据结构 #### 作用: 将一个合法的 **JSON 字符串** 解析成 Lua 的 table 或基本类型(如 number、string、boolean),以便在脚本中操作。 #### 示例代码: ```lua local cjson = require("cjson") local json_str = [[ { "title": "Book List", "total": 2, "books": [ {"id": 1, "name": "Lua Programming"}, {"id": 2, "name": "Advanced C++"} ], "available": true } ]] local data = cjson.decode(json_str) print("Title:", data.title) print("Total Books:", data.total) for i, book in ipairs(data.books) do print(i .. ": " .. book.name) end ``` #### 输出结果: ``` Title: Book List Total Books: 2 1: Lua Programming 2: Advanced C++ ``` --- ### 🔍 更多细节说明 | 特性 | 说明 | |------|------| | ✅ 支持的数据类型 | string, number, boolean, array (table with sequential indices), object (key-value table), null (`cjson.null`) | | ❌ 不支持 Lua 特有类型 | 函数(function)、线程(thread)、userdata 无法被 encode | | 🔄 类型映射 | Lua table ↔ JSON object / array;`true/false` ↔ boolean;`nil` ↔ `null` | | ⚠️ 错误处理 | 若 JSON 字符串非法,`decode()` 会抛出错误,建议用 `pcall` 包裹 | #### 安全解码示例(带错误处理): ```lua local cjson = require("cjson") local bad_json = '{"name": "Bob", "age": }' -- 非法 JSON local ok, data = pcall(cjson.decode, bad_json) if ok then print("解析成功:", data.name) else print("❌ JSON 解析失败:无效格式") end ``` --- ### ✅ 实际应用场景 1. **Web API 通信** ```lua -- 发送请求前:把 Lua 表转为 JSON local payload = cjson.encode({ action = "login", user = "admin" }) http.post("/api", payload) ``` 2. **配置文件读取** ```lua local file = io.open("config.json", "r") local config = cjson.decode(file:read("*all")) file:close() print(config.db_host) ``` 3. **日志记录或调试输出** ```lua print("Debug data:", cjson.encode(my_table)) ``` 4. **与 C/C++/Python 等语言交互** - 多语言系统中,JSON 是通用数据交换格式。 --- ### ✅ 常见问题 & 解决方案 | 问题 | 解决方法 | |------|----------| | `module 'cjson' not found` | 安装 lua-cjson:`luarocks install lua-cjson` 或 OpenWrt 上 `opkg install lua-cjson` | | 中文乱码? | 确保输入输出使用 UTF-8 编码 | | 如何保留顺序? | JSON 对象本身无序,但数组有序;某些库支持“strict mode”或自定义排序 | | 如何格式化输出? | 使用 `cjson.encode_pretty()`(如果支持)美化输出 | #### 美化输出示例(OpenResty 中可用): ```lua local cjson = require("cjson.safe") cjson.encode_empty_table_as_object(true) cjson.encode_sparse_array(true) print(cjson.encode_pretty({a=1, b={2,3}, c=true})) ``` 输出: ```json { "a": 1, "b": [ 2, 3 ], "c": true } ``` --- ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值