You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 04:27:40