java之--把jython得到的基本数据类型转换成Java数据类型

今天,给大家介绍下如何在java用jython的方法得到Python数据并把它转换为java下数据类型.下面我们进入正题:

我们使用的jython的jar包版本为2.70,然后在引入jar包jythonutils1.0

例如下面是之前只用jython2.70常用方法:

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());

	}
}
但是有个问题我们怎么精确的得到PyObject类包装的Python数据并转换成java数据呢:

先引入测试的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




你可能感兴趣的:(java之--把jython得到的基本数据类型转换成Java数据类型)