首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Luaj解析表内容

Luaj解析表内容
EN

Stack Overflow用户
提问于 2015-07-21 02:05:18
回答 3查看 1.4K关注 0票数 1

我刚刚开始在我的项目中使用luaj,我想在我的lua表中获得字符串内容。例如:

代码语言:javascript
复制
t = {
    subTitle = "Haircut",
}
return t;

我想要得到字幕的内容,这应该是非常简单的,但我不知道如何做。在我的代码中,我编写了类似以下示例的代码:

代码语言:javascript
复制
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()只能应用于get函数。如何获取subTitle的内容?非常感谢你的帮助。

EN

回答 3

Stack Overflow用户

发布于 2015-07-21 21:41:38

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

也许这个例子更清楚:

代码语言:javascript
复制
Globals globals = JsePlatform.standardGlobals();
LuaValue chunk = globals.load(
    "t = {"+
    "    subTitle = 'Haircut',"+
    "};"+
    "return t");
LuaValue result = chunk.call();  // Executes the chunk and returns 't'
String text = result.get("subTitle").tojstring();
System.out.println(text);

您的脚本还为(全局)变量"t“赋值,这会在全局表中留下一个副作用,因此您也可以直接从全局变量中获取结果(在调用块之后

代码语言:javascript
复制
String text = globals.get("t").get("subTitle").tojstring();
System.out.println(text);
票数 1
EN

Stack Overflow用户

发布于 2015-10-05 11:18:39

Java中lua文件的加载和串行遍历。

任意lua文件(test.lua):

代码语言:javascript
复制
return 
{
   myTable = 
   {
      { key1 = "a", ... },
      { key1 = "b", ... },
      { key1 = "c", ..., key5 = {key5.1="d", ...} }
   }
}

java是这样的(Android):

代码语言:javascript
复制
public static void loadLua(InputStream in)
{
    // Loading and serial traversal of a lua file in Java.
    //
    // create an environment to run in
    Globals globals = JsePlatform.standardGlobals();
    LuaValue chunk = globals.load(in, "@"+"test.lua", "bt");
    LuaClosure closure = new LuaClosure(chunk.checkclosure().p, globals); 

    //You must invokink ze closure to get ze data!
    LuaTable table = closure.call().checktable().get("myTable").checktable();

    //Serial traversal to an output stream.
    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 is a nested hash table
        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转换器,我将向上投票。

票数 0
EN

Stack Overflow用户

发布于 2020-07-13 17:17:52

假设我们有一段用lua编写的示例代码:

t = { subTitle = "Haircut", }

您可以在lua中执行此操作,以便仅解析特定的数据

function getSubtitle() return t.subTitle end

在java中,要检索数据:

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31523355

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档