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

在Solar 2D中如何将字符串转为table?排查并修复错误代码

Solar2D中字符串与Table互转问题修复

原代码的核心问题

  1. loadstring未执行返回函数:loadstring生成的是可执行函数,必须调用它(加())才能得到解析后的Table,直接访问函数的索引会报错。
  2. 字符串转义写法冗余:原代码用"\\".."\""生成转义引号,完全可以简化为"\"",不影响功能但写法没必要复杂。
  3. 数字类型处理缺失:原代码会把数字也转成带引号的字符串,若需要保留数字类型会不符合预期。

修复后的完整代码

actionTable = {projectsSettings = {projects = {"Default"}},settings = {projectName = "Default"},blocks = {Default = {ifTouch = {quantityBlocks = "0"},ifStart = {quantityBlocks = "0"}}}}

local function tableToString(tbl)
    local result = "{"
    for k, v in pairs(tbl) do
        -- 处理字符串类型的键
        if type(k) == "string" then
            result = result .. k .. " = "
        end

        -- 根据值的类型拼接字符串
        if type(v) == "table" then
            result = result .. tableToString(v)
        elseif type(v) == "boolean" then
            result = result .. tostring(v)
        elseif type(v) == "number" then
            -- 数字直接拼接,不添加引号
            result = result .. tostring(v)
        else
            -- 字符串转义双引号
            result = result .. "\"" .. v .. "\""
        end
        result = result .. "," 
    end
    -- 移除最后一个多余的逗号
    if #result > 1 then
        result = result:sub(1, #result - 1)
    end
    return result .. "}"
end

local str1 = tableToString(actionTable)
print(str1 .. " STR")

-- 执行loadstring返回的函数,获取解析后的Table
local tbl1 = loadstring("return " .. str1)()
if tbl1 then
    print(tbl1.settings.projectName) -- 输出 Default
else
    print("Table解析失败")
end

更简便的方案:用Solar2D自带JSON库

手动写序列化函数容易踩各种类型处理的坑,Solar2D自带json库可以直接实现Table和字符串的互转,更稳定:

local json = require("json")

-- Table转字符串
local str1 = json.encode(actionTable)
-- 字符串转Table
local tbl1 = json.decode(str1)
print(tbl1.settings.projectName) -- 输出 Default

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 19:00:12