Luaj 解析表格内容。

我刚开始在我的项目中使用 luaj,并想要获取我的 lua 表格中的字符串内容。

例如:

t = {
    subTitle = "Haircut",
}
return t;

我想要获取 subTittle 的内容,但这应该非常简单,但我不知道如何做到。

在我的代码中,我写了以下代码:

public class MainActivity extends ActionBarActivity {

    Globals globals = JsePlatform.standardGlobals();
    TextView textView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        textView = (TextView)findViewById(R.id.text);

        try {
            LuaValue chunk = globals.loadfile("assets/Test.lua");
            String text = chunk.get("t").get("subTitle").call().tojstring();
            textView.append(text);
        }
        catch (Exception e)
        {
        }
    }

}

但它一直告诉我 get() 只能应用于获取函数。我怎样才能获取 subTitle 的内容呢?非常感谢您的帮助。

点赞
用户2556943
用户2556943

该块返回在执行之前编译的脚本,因此您必须“调用(call())”一次该块才能执行它并获得结果。

也许这个例子更清晰:

Globals globals = JsePlatform.standardGlobals();
LuaValue chunk = globals.load(
    "t = {"+
    "    subTitle = 'Haircut',"+
    "};"+
    "return t");
LuaValue result = chunk.call();  // 执行该块并返回 't'
String text = result.get("subTitle").tojstring();
System.out.println(text);

您的脚本还对变量“t”进行了分配,这在全局表中留下了副作用,因此您也可以在调用块后直接从_globals_获取结果:

String text = globals.get("t").get("subTitle").tojstring();
System.out.println(text);
2015-07-21 13:41:37
用户1048170
用户1048170

在 Java 中加载并遍历 lua 文件。

任意的 lua 文件(test.lua):

返回
{
   myTable =
   {
      { key1 = "a", ... },
      { key1 = "b", ... },
      { key1 = "c", ..., key5 = {key5.1="d", ...} }
   }
}

Java 代码如下(Android):

public static void loadLua(InputStream in)
{
    // 在 Java 中加载并遍历 lua 文件。
    //
    // 创建运行环境
    Globals globals = JsePlatform.standardGlobals();
    LuaValue chunk = globals.load(in, "@"+"test.lua", "bt");
    LuaClosure closure = new LuaClosure(chunk.checkclosure().p, globals);

    // 必须调用闭包获取数据!
    LuaTable table = closure.call().checktable().get("myTable").checktable();

    // 遍历并输出到输出流。
    int l = table.length();
    for (int i =1;i<=l;i++)
    {
        System.out.println("---------------------------------------");
        System.out.println("key1:"+table.rawget(i).get("key1"));
        System.out.println("key2:"+table.rawget(i).get("key2"));
        System.out.println("key3:"+table.rawget(i).get("key3"));
        System.out.println("key4:"+table.rawget(i).get("key4"));

        // Key5 是一个嵌套的哈希表
        LuaValue key5 = table.rawget(i).get("key5");
        if( !key5.isnil())
        {
            System.out.println("Key5");
            LuaValue[] keys = key5.checktable().keys();
            for (int j = 0; j<keys.length; j++)
            {
                System.out.println("  ["+keys[j]+"]"+"key5.1:"+key5.checktable().get(keys[j]).get("key5.1"));
                System.out.println("  ["+keys[j]+"]"+"key5.2:"+key5.checktable().get(keys[j]).get("key5.2"));
                System.out.println("  ["+keys[j]+"]"+"key5.3:"+key5.checktable().get(keys[j]).get("key5.3"));
            }
        }
    }
}

编辑:如果有人想留下等效的 jSON 转换器,我将点赞。

2015-10-05 03:18:39
用户13921410
用户13921410

假设我们有一个使用Lua编写的代码示例:

t = { subTitle = "Haircut", }


你可以用Lua来解析 仅特定数据

function getSubtitle() return t.subTitle end

而在Java中,获取数据的方法是:

String v = globals.get("getSubtitle").invoke().toString();

2020-07-13 09:17:51