我刚开始在我的项目中使用luaj,我想在我的lua表中获取字符串内容。 例如:
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 :(得分:1)
返回的块表示编译脚本在执行之前,所以你必须调用()"块一次执行它并获得结果。
也许这个例子更清楚:
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"这会在globals表中留下副作用,所以你也可以从 globals 中获得结果(在调用chunk之后):
String text = globals.get("t").get("subTitle").tojstring();
System.out.println(text);
答案 1 :(得分:0)
在Java中加载和串行遍历lua文件。
任意lua文件(test.lua):
return
{
myTable =
{
{ key1 = "a", ... },
{ key1 = "b", ... },
{ key1 = "c", ..., key5 = {key5.1="d", ...} }
}
}
java就像这样(Android):
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转换器,我会赞成它。
答案 2 :(得分:0)
假设我们有用lua编写的示例代码:
CREATE TABLE [BI].[DS].[ORDERDATA_TEMP_DELETE]
(
ORDERNUMBER decimal(28,0) NOT NULL
);
GO
您可以在lua中执行此操作,以仅解析特定数据
t = { subTitle = "Haircut", }
并在Java中检索数据:
function getSubtitle() return t.subTitle end