如何从Lua Table中动态读取嵌套JSON数组的值
Lua 动态读取嵌套数组中指定类型的值
场景说明
有如下JSON结构(解码后对应Lua Table):
{ "request": { "name": "abcd", "pincode": "1223444" }, "PhoneNumbers": [ { "Type": "home", "Number": "1234456" }, { "Type": "personal", "Number": "66666666" } ] }
需要根据传入的类型字符串(比如"home"),动态遍历PhoneNumbers数组,匹配对应类型的字段值,替代硬编码数组索引的写法。
解决方案
写一个通用遍历函数,传入解码后的Lua Table和目标类型,循环匹配后返回对应值:
-- 先解码JSON为Lua Table local payloadValue = cjson.decode(requestPayload) -- 定义动态查找函数 local function findPhoneNumberByType(phoneNumbers, targetType) for _, phone in ipairs(phoneNumbers) do -- 注意Lua区分大小写,需与Table中的键名完全一致 if phone.Type == targetType then return phone.Number end end -- 未匹配到返回nil,也可自定义默认值 return nil end -- 使用示例:获取home类型的号码 local homeNumber = findPhoneNumberByType(payloadValue.PhoneNumbers, "home") print(homeNumber) -- 输出:1234456 -- 获取personal类型的号码 local personalNumber = findPhoneNumberByType(payloadValue.PhoneNumbers, "personal") print(personalNumber) -- 输出:66666666
扩展处理
如果数组中可能存在多个同类型条目,可返回存储所有匹配值的数组:
local function findAllPhoneNumbersByType(phoneNumbers, targetType) local result = {} for _, phone in ipairs(phoneNumbers) do if phone.Type == targetType then table.insert(result, phone.Number) end end return result end
内容的提问来源于stack exchange,提问作者Srinivas Reddy Bhethi
相关产品推荐
相关产品推荐

