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

Lua中如何遍历多个连续独立table并匹配对应员工编号

核心实现思路

你拿到的连续独立表本质是拼接的Lua表字面量字符串,无法直接用pairs/ipairs遍历,需要先解析为合法的Lua表集合再做匹配。


方案1:简单字符串替换(适合表内容无嵌套}的场景)

直接对原始字符串做格式化处理,转成合法的Lua数组后加载遍历,实现最简单:

-- 原始连续表字符串
local raw_data = '{"cid":"12"}{"cid":"13"}'
-- 格式化处理为合法Lua表数组字面量
local formatted = "return " .. "{" .. string.gsub(raw_data, "}", "},"):sub(1, -2) .. "}"
-- 加载为Lua表
local table_list = load(formatted)()

-- 遍历匹配员工编号,示例匹配cid为13的记录
local target_cid = "13"
for _, item in ipairs(table_list) do
    -- 可直接访问字段判断,也可以用pairs遍历item的所有键值
    if item.cid == target_cid then
        print("匹配成功,员工cid:" .. item.cid)
        -- 匹配到后可break终止遍历
        break
    end
end

方案2:括号计数拆分(兼容字段包含}的复杂场景)

如果你的表字段内容本身包含{/}字符,方案1的全局替换会出错,用括号层级计数的方式拆分更稳定:

-- 连续表拆分工具函数
local function split_continuous_tables(raw_str)
    local res = {}
    local start_pos = 1
    local bracket_level = 0
    for i = 1, #raw_str do
        local char = raw_str:sub(i, i)
        if char == "{" then
            bracket_level = bracket_level + 1
            if bracket_level == 1 then
                start_pos = i
            end
        elseif char == "}" then
            bracket_level = bracket_level - 1
            if bracket_level == 0 then
                local single_tbl = load("return " .. raw_str:sub(start_pos, i))()
                table.insert(res, single_tbl)
            end
        end
    end
    return res
end

-- 使用示例
local raw_data = '{"cid":"12","info":"测试{内容}1"}{"cid":"13","info":"测试}内容2"}'
local table_list = split_continuous_tables(raw_data)

-- 遍历匹配逻辑同上
local target_cid = "13"
for _, item in ipairs(table_list) do
    if item.cid == target_cid then
        print("匹配成功,员工cid:" .. item.cid .. ",附加信息:" .. item.info)
    end
end

提示:如果你使用的是Lua 5.1版本,将上述代码中的load替换为loadstring即可正常运行。
安全提示:如果原始数据来自不可信来源,不要直接使用load/loadstring加载,避免代码注入风险,可先将原始字符串格式化为标准JSON后用安全的JSON解析库解析。


内容的提问来源于stack exchange,提问作者infamous

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 22:57:02