Python之玩转Jython系列(二)
2015-04-09 16:16
274 查看
jython返回值之解析
使用jython脚本就是为了更好的扩展和控制,返回的类型也就要做相应的处理了:
换种方式了
使用jython脚本就是为了更好的扩展和控制,返回的类型也就要做相应的处理了:
package com; import java.io.UnsupportedEncodingException; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; /** * Jython常用用法Test * * @author Administrator * */ public class ForJavaTest { public static void main(String[] args) throws PyException { PythonInterpreter interp = new PythonInterpreter(); interp.execfile("./src/com/test.py"); // 数据统计(用于数据,<0 输出-1.> 2 输出0 到 实际输出值 的和) PyFunction pyFunction = (PyFunction) interp.get("getValue", PyFunction.class); System.out.println("Result: " + pyFunction.__call__(new PyInteger(5))); // 动态获取最新配置的方法 PythonInterpreter interp1 = new PythonInterpreter(); interp1.exec("import re"); interp1.execfile("./src/com/configValue.py"); PyFunction pyFunction1 = (PyFunction) interp1.get("getConfig", PyFunction.class); System.out.println("config value: " + pyFunction1.__call__(new PyString("MaxValue"))); // 进行复杂类接受处理 Map<String, Object> res = new HashMap<String, Object>(); res.put("1", "Danny"); res.put("2", "Fanny"); PythonInterpreter interpM = new PythonInterpreter(); interpM.execfile("./src/com/DataDeal.py"); PyFunction pyFunctionM = (PyFunction) interpM.get("main", PyFunction.class); Map<PyObject, PyObject> tableM = new HashMap<PyObject, PyObject>(); tableM.put(new PyString("conf"), PyJavaType.wrapJavaObject(res)); PyDictionary pydM = new PyDictionary(tableM); PyObject obj = pyFunctionM.__call__(pydM); Map<String, Object> resu; PyDictionary resMap = (PyDictionary) obj; resu = processResult(resMap); System.out.println(resu); } public static Map<String, Object> processResult(PyDictionary obj) { Map<String, Object> res = new HashMap<String, Object>(); Iterator<String> keyIter = obj.keySet().iterator(); System.out.println("=======java====="); while (keyIter.hasNext()) { String key = keyIter.next(); PyString pykey = new PyString(key); PyObject pyvalue = obj.get(pykey); System.out.println(pykey); System.out.println(pyvalue); if (pyvalue instanceof PyList) { List<Map<String, Object>> list = new ArrayList<Map<String, Object>>(); PyObject[] dataList = ((PyList) pyvalue).getArray(); int i = 0; while (i < dataList.length) { System.out.println(dataList[i]); list.add(processResult((PyDictionary) dataList[i])); i++; } res.put(key, list); System.out.println("+++++++result+++++"); } else if (pyvalue instanceof PyString) { try { res.put(key, new String(((PyString) pyvalue).toBytes(), "utf-8")); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } } else { res.put(key, pyvalue.toString()); } } return res; } }其中复杂类型就涉及到递归的运算了,但在实际中由于版本的不同,返回的类型的处理就可能
换种方式了
// 获取jythond返回的总数据 PyObject[] dataList = ((PyList) obj).getArray(); list = processResult((PyDictionary) dataList[0]);
相关文章推荐
- Python之玩转Jython系列(一)
- python系列:玩转大家来找茬
- 1-玩转Python3金融API应用-查阅easytrader家族系列模块
- 使用python来玩转ensp~系列1-telnet方式登录管理设备
- [置顶] Python开发系列课程(5) - 玩转PyCharm(上)
- Python学习系列之Object and Object-Orientation
- (Python编程)Jython:Java的Python
- Python学习系列之异常和文件操作
- python tips 系列 修改UNIX时区
- Python socket udp网络编程系列一(客户端)
- 支持Python系列:Matlab的Python实现Scipy和Matplotlib简介
- (转)手把手教你玩转ARP包(完)【数据包的游戏系列之一】
- 把python程序用jython编译为java的jar包
- python小例子系列启动之公示
- Python设计模式系列之一: 用模式改善软件设计
- 手把手教你玩转ARP包(三)【数据包的游戏系列之一】
- Python学习系列之二
- .NET 精髓Python系列文章
- 手把手教你玩转ARP包(完)【数据包的游戏系列之一】
- 手把手教你玩转ARP包(一)【数据包的游戏系列之一】