Luaj解析表格内容
问题描述:
我刚开始在我的项目中使用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的内容?非常感谢你的帮助。
答
返回的块表示在执行它之前编译的脚本,因此您必须“调用()”一次块来执行它并获得结果。
也许这个例子更清楚:
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);
答
加载和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转换器,我会赶上它。
谢谢你的回答。但get()是从Lua脚本获取函数的方法。所以在我测试你的代码之后,它不起作用。幸运的是,我想通过在Lua脚本中添加Lua函数来实现它,所以我可以通过Java代码调用它来获取字符串内容。 –