2015-07-20 50 views
0

我刚开始在我的项目中使用luaj,并且想要在我的lua表格中获取字符串内容。 例如:Luaj解析表格内容

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

我想获得字幕的内容应该是很简单的,但我不知道该怎么做。 在我的代码,我写的代码像下面的例子:

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的内容?非常感谢你的帮助。

回答

0

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

也许这个例子更清楚:

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”这让在全局表的副作用,所以你也可以只得到结果(在调用块)从全局

String text = globals.get("t").get("subTitle").tojstring(); 
System.out.println(text); 
+0

谢谢你的回答。但get()是从Lua脚本获取函数的方法。所以在我测试你的代码之后,它不起作用。幸运的是,我想通过在Lua脚本中添加Lua函数来实现它,所以我可以通过Java代码调用它来获取字符串内容。 –

0

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

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

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

的java的是这样的(安卓):

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转换器,我会赶上它。