/* * Created by LuaView. * Copyright (c) 2017, Alibaba Group. All rights reserved. * * This source code is licensed under the MIT. * For the full copyright and license information,please view the LICENSE file in the root directory of this source tree. */ package com.taobao.luaview.userdata.kit; import com.taobao.luaview.fun.mapper.LuaViewLib; import com.taobao.luaview.scriptbundle.asynctask.SimpleTask1; import com.taobao.luaview.userdata.base.BaseLuaTable; import com.taobao.luaview.util.JsonUtil; import com.taobao.luaview.util.LuaUtil; import org.luaj.vm2.Globals; import org.luaj.vm2.LuaValue; import org.luaj.vm2.Varargs; import org.luaj.vm2.lib.VarArgFunction; /** * Json 用户数据封装 * * @author song * @date 15/9/6 */ @LuaViewLib(revisions = {"20170306已对标", "iOS有toJson方法"}) public class UDJson extends BaseLuaTable { public UDJson(Globals globals, LuaValue metatable) { super(globals, metatable); init(); } private void init() { set("toTable", new toTable()); set("isValid", new isValid()); // set("parse", new parse()); } //is vaild class isValid extends VarArgFunction { @Override public LuaValue invoke(Varargs args) { final LuaValue target = args.arg(2); final LuaValue callback = LuaUtil.getFunction(args, 3); if(callback != null){//通过callback来处理 new SimpleTask1<LuaValue>() { @Override protected LuaValue doInBackground(Object... params) { return isValid(target); } @Override protected void onPostExecute(LuaValue result) { LuaUtil.callFunction(callback, result); } }.executeInPool(); return LuaValue.NIL; } else { return isValid(target); } } private LuaValue isValid(LuaValue target){ if (target instanceof UDData) { return valueOf(JsonUtil.isJson(((UDData) target).toJson(UDData.DEFAULT_ENCODE))); } else if (LuaUtil.isString(target)) { return valueOf(JsonUtil.isJson(target.optjstring(null))); } return LuaValue.FALSE; } } //to table class toTable extends VarArgFunction { @Override public Varargs invoke(Varargs args) { final LuaValue target = args.arg(2); final LuaValue callback = LuaUtil.getFunction(args, 3); if (callback != null) {//通过callback来处理toTable new SimpleTask1<LuaValue>() { @Override protected LuaValue doInBackground(Object... params) { return toTable(target); } @Override protected void onPostExecute(LuaValue result) { LuaUtil.callFunction(callback, result); } }.executeInPool(); return NIL; } else { return toTable(target); } } private LuaValue toTable(LuaValue target) { if (target instanceof UDData) { return ((UDData) target).toTable(UDData.DEFAULT_ENCODE); } else if (LuaUtil.isString(target)) { return JsonUtil.toLuaTable(target.optjstring(null)); } else if (LuaUtil.isTable(target)) { return target; } return NIL; } } }