java之--把jython得到的基本資料型別轉換成Java資料型別
阿新 • • 發佈:2018-12-31
今天,給大家介紹下如何在java用jython的方法得到Python資料並把它轉換為java下資料型別.下面我們進入正題:
我們使用的jython的jar包版本為2.70,然後在引入jar包jythonutils1.0
例如下面是之前只用jython2.70常用方法:
但是有個問題我們怎麼精確的得到PyObject類包裝的Python資料並轉換成java資料呢:import org.python.core.PyFunction; import org.python.core.PyInteger; import org.python.core.PyObject; import org.python.util.PythonInterpreter; /** * 在java中呼叫本機python指令碼中的函式 * * @author liuyazhuang * */ public class FirstJythonScript { public static void main(String args[]) { PythonInterpreter interpreter = new PythonInterpreter(); interpreter.execfile("D:/Workspaces/J2EE/Test/config/my_utils.py"); PyFunction func = (PyFunction) interpreter.get("adder", PyFunction.class); int a = 2010, b = 6; PyObject pyobj = func.__call__(new PyInteger(a), new PyInteger(b)); System.out.println("anwser = " + pyobj.toString()); } }
先引入測試的test.py檔案,我是把它直接放在src下的
#coding='utf-8'
def fun1(*argv):
return {i==argv[0]:i for i in argv}
def fun2(a, b):
return a+b
def fun3(*argv):
return [i for i in argv]
def fun4():
return '你好,jython世界!'
#print('hello jython!')
先看個引入jythonutils1.0後的簡單例子:
1.
@Test
public void fun5() throws Exception{//.py檔案執行
JythonUtils.execPyFile("src/text.py");
}
2.執行結果:@Test public void fun4() throws Exception{//python的string轉java的string PyObject object = JythonUtils.execPyFunction("src/text.py", "fun4"); String str= (String)JythonUtils.toObjectFromPyObject(object); System.out.println(JythonUtils.encoding(str)); }
你好,jython世界!
3.
@Test
public void fun3() throws Exception{//python的list轉java的list
List l = new ArrayList();
l.add(1);
l.add("100");
PyObject object = JythonUtils.execPyFunction("src/text.py", "fun3",1,2,"hello!",l);
List list= (List)JythonUtils.toObjectFromPyObject(object);
System.out.println(list);
System.out.println(list.get(2));
System.out.println(((List)list.get(3)).get(1));
}
執行結果:
[1, 2, 'hello!', [1, '100']]
hello!
100
4.
@Test
public void fun2() throws Exception{//python的int轉java的int
PyObject object = JythonUtils.execPyFunction("src/text.py", "fun2",1,2);
int n= (Integer)JythonUtils.toObjectFromPyObject(object);
System.out.println(n);
}
執行結果:
3
5.
@Test
public void fun1() throws Exception{//python的dict轉java的map
PyObject object = JythonUtils.execPyFunction("src/text.py", "fun1",1,"haha");
Map map= (Map)JythonUtils.toObjectFromPyObject(object);
System.out.println(map);
System.out.println(map.get(true));
}
執行結果:
{False: 'haha', True: 1}
1
注:這裡我執行的都是用Junit的@Test方式
在這裡jythonutils包裝了一些簡單的操作
像只執行.py檔案的話執行
JythonUtils.execPyFile("檔名")
執行.py中的方法
PyObject object = JythonUtils.execPyFunction("檔名", "函式名",引數1,引數2,,...);//這裡是可變引數
Object o = JythonUtils.toObjectFromPyObject(object);
將o強轉為自己需要的java資料型別以Map為例:
Map map= (Map) o;
若在轉String型別碰到中文亂碼情況可以嘗試使用:
String str= (String)JythonUtils.toObjectFromPyObject(object);
JythonUtils.encoding(str);
jython2.7jar包下載連結http://download.csdn.net/detail/l1028386804/9464731
jythonutils1.0包下載連結http://download.csdn.net/detail/zq18239961260/9848466
jython2.70常用方法連結:http://m.blog.csdn.net/article/details?id=50915556