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

如何将服务器返回的字符串数据解析为Lua Table?

解析服务器字符串为Lua Table的解决方案

核心思路

针对服务器返回的两种行格式(冒号分隔、多空格分隔),通过Lua字符串匹配分别提取键值对,最终存入目标Table。

实现代码

local response_str = [[E000: Success
AOS               1.5.1.1
Switched Rack PDU 1.2.0.2 
Model:            abc3245
Name:             Test Device
Location:         Unknown
Contact:          Unknown
Present Outlets:  16
Switched Outlets: 16
Metered Outlets:  0
Max Current:      32 A A
Present Phases:   1
Metered Phases:   1
Metered Banks:    2
Uptime:           1 Day 9 Hours 22 Minutes
Network Link:     Link Active
]]

local DataTable = {}

-- 逐行处理返回字符串
for line in response_str:gmatch("[^\r\n]+") do
    -- 处理带冒号的键值行
    local key, value = line:match("^([^:]+):%s*(.+)$")
    if key and value then
        -- 去除键值首尾多余空格
        key = key:match("^%s*(.-)%s*$")
        value = value:match("^%s*(.-)%s*$")
        DataTable[key] = value
    else
        -- 处理多空格分隔的键值行(键可能包含空格)
        local key, value = line:match("^(.+)%s{2,}(.+)$")
        if key and value then
            key = key:match("^%s*(.-)%s*$")
            value = value:match("^%s*(.-)%s*$")
            DataTable[key] = value
        end
    end
end

-- 验证输出(可选)
for k, v in pairs(DataTable) do
    print(string.format("[%q] = %q", k, v))
end

代码说明

  1. 行遍历:通过gmatch("[^\r\n]+")逐行读取服务器返回的字符串,自动跳过空行。
  2. 带冒号行处理:用^([^:]+):%s*(.+)$匹配冒号分隔的行,捕获冒号前的内容作为键,冒号后(去除前置空格)的内容作为值。
  3. 多空格行处理:用^(.+)%s{2,}(.+)$匹配键后跟随至少两个空格的行,捕获空格前的内容(支持带空格的键名,如Switched Rack PDU)作为键,空格后的内容作为值。
  4. 去空格处理:对每个键和值执行首尾去空格,避免多余空白影响结果准确性。

运行代码后,DataTable将包含所有解析后的键值对,比如:

  • DataTable["E000"] = "Success"
  • DataTable["AOS"] = "1.5.1.1"
  • DataTable["Switched Rack PDU"] = "1.2.0.2"

内容的提问来源于stack exchange,提问作者Prakash.DTI

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 02:50:27