如何在Lua中读取JSON请求体中的嵌套对象及数组
如何在Lua中读取JSON请求体中的嵌套对象及数组
嘿,我来帮你搞定这个Lua处理JSON嵌套数组的问题~首先提个小细节:你代码里的transorm_vody是拼写错误哦,应该是transform_body;另外languageid的大小写要和原JSON里的languageId保持一致,不然会读不到对应的值哒。
首先要确认你已经用了Lua的JSON解析库,比如常用的cjson或者dkjson——因为Lua本身没有内置JSON解析能力,得先把请求体的JSON字符串转成Lua的表结构。比如用cjson的话,解析代码大概是这样:
local cjson = require("cjson") -- 假设request_body是你拿到的原始JSON请求体字符串 local body = cjson.decode(request_body)
接下来处理顶层字段时,修正拼写和大小写问题后的代码应该是:
local transform_body = {} transform_body["year"] = body["year"] transform_body["languageId"] = body["languageId"] -- 键名大小写要和原JSON严格匹配 transform_body["city"] = body["city"] transform_body["usecase"] = body["usecase"]
重点来了,处理TheatreInfo这个嵌套数组。因为它是包含多个影院对象的数组(对应Lua里的表),你有两种灵活的处理方式:
方式一:直接复制原数组(无需修改元素时用)
如果你不需要改动影院对象里的字段,直接把整个数组赋值过去就好,操作非常简单:
transform_body["TheatreInfo"] = body["TheatreInfo"]
方式二:遍历数组并按需处理每个元素
如果需要对每个影院对象做调整(比如修改键名、过滤不需要的字段等),就用ipairs遍历数组,逐个处理后存入新表:
-- 先初始化一个空表来存放处理后的影院信息 transform_body["TheatreInfo"] = {} -- 遍历原TheatreInfo数组,_是索引(这里我们不需要用到索引),theatre是每个影院对象 for _, theatre in ipairs(body["TheatreInfo"]) do -- 按需提取或修改字段,比如这里原样提取tId和tname local processed_theatre = { tId = theatre["tId"], tname = theatre["tname"] -- 要是想改键名,比如把tId改成theatre_id,就写成theatre_id = theatre["tId"] } -- 把处理后的影院对象插入到新数组里 table.insert(transform_body["TheatreInfo"], processed_theatre) end
这样不管TheatreInfo里有1个还是多个元素,都能完美处理啦。要是你用的是dkjson库,只需要把解析语法换成dkjson.decode(request_body)就行,核心逻辑完全一致。
备注:内容来源于stack exchange,提问作者Nani




