如何将服务器返回的字符串数据解析为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
代码说明
- 行遍历:通过
gmatch("[^\r\n]+")逐行读取服务器返回的字符串,自动跳过空行。 - 带冒号行处理:用
^([^:]+):%s*(.+)$匹配冒号分隔的行,捕获冒号前的内容作为键,冒号后(去除前置空格)的内容作为值。 - 多空格行处理:用
^(.+)%s{2,}(.+)$匹配键后跟随至少两个空格的行,捕获空格前的内容(支持带空格的键名,如Switched Rack PDU)作为键,空格后的内容作为值。 - 去空格处理:对每个键和值执行首尾去空格,避免多余空白影响结果准确性。
运行代码后,DataTable将包含所有解析后的键值对,比如:
DataTable["E000"] = "Success"DataTable["AOS"] = "1.5.1.1"DataTable["Switched Rack PDU"] = "1.2.0.2"
内容的提问来源于stack exchange,提问作者Prakash.DTI
相关产品推荐
相关产品推荐

