You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在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

火山引擎 最新活动