Java-封装生成JSON数据和XML数据类

来源:互联网 发布:西门子工业软件怎么样 编辑:程序博客网 时间:2024/06/06 05:25

1.背景

   借鉴与php中 app接口的实现(php写app接口生成xml和json数据),封装了java版的json和xml数据操作类!


2.准备

   在使用之前,需要引入 json 的jar 包:点我下载 !

   这里实现了,对象转json , 对象集合转json, 对象转xml,对象集合转xml ;


3.appUtil 工具类实现

    具体的实现过程,我就不解释了,一边写,一边测试!直到写成为止!

    里面的 tojsonArray() 方法 没有使用,可以删除,不过想生成json数组的 ,就不需要删除了!

  

package Interface.app.Util;import java.util.HashMap;import java.util.Iterator;import java.util.Map;import net.sf.json.JSONArray;import net.sf.json.JSONObject;public class AppUtil { //默认值 private static final String JSON="json"; private static final String XML="xml";  /**  *  工具类入口  * @param code 状态码  * @param msg  提示信息  * @param obj  返回数据  * @param type 数据类型   json / xml  * @return  字符串  */public static String toPrint(int code,String msg,Object obj,String type){  //大小写不影响 String str="";  if(JSON.equalsIgnoreCase(type)&&JSON.equals(type)){//生成json数据 str=toJsonString(code, msg, obj);  }else if(XML.equalsIgnoreCase(type)&&XML.equals(type)){//生成xml数据 str=toXml(code, msg, obj);  }else{ //默认使用 json , 参数错误的话 ,默认 为json str=toJsonString(code, msg, obj); } return str; }      /**      * 对象转 json 数组       * @param code 状态码      * @param msg  状态信息      * @param obj  数据      * @return json数组 字符串      */ @SuppressWarnings("unused")private static String toJsonArray(int code,String msg,Object obj){  Map<String, Object> map=toKeyVal(code, msg, obj);  JSONArray jsonArray=JSONArray.fromObject(map); return jsonArray.toString(); }  /**  *  这一个就够了!  *    * 转 json 对象   * @param code 状态码  * @param msg  提示信息  * @param obj  数据  * @return json对象 字符串  */ private static String toJsonString(int code,String msg,Object obj){  if(obj==null) {obj="";}  Map<String, Object> map=toKeyVal(code, msg, obj);  JSONObject jsonObject=JSONObject.fromObject(map); return jsonObject.toString(); }  /**  *  转xml 格式 :字符串拼装的格式   * @param code 状态码  * @param msg  提示信息  * @param obj  数据  * @return xml数据  */ private static String toXml(int code,String msg,Object obj){ if(obj==null) {obj="";}     Map<String,Object> map=toKeyVal(code, msg, obj);    JSONObject object=JSONObject.fromObject(map);  StringBuilder builder=new StringBuilder("<?xml version='1.0' encoding='UTF-8'?>"); builder.append("<root>"); builder.append(mapToxml(object)); builder.append("</root>"); return builder.toString(); }   /**  * 用来封装数据  * @param code 状态码  * @param msg  信息  * @param obj 数据  * @return  */private static Map<String, Object> toKeyVal(int code,String msg,Object obj){ Map<String,Object> map=new HashMap<String, Object>();map.put("code", code);map.put("msg", msg);map.put("data", obj);return map; }/** * 生成 xml * @param object * @return */private static String mapToxml(JSONObject object){StringBuilder builder=new StringBuilder();@SuppressWarnings("unchecked")Iterator<String> iterator=object.keys();    while(iterator.hasNext()){        String key=iterator.next();    builder.append("<"+key+">");        if(object.get(key) instanceof JSONObject){    //如果是 JSONObject的话    //递归 调用    builder.append(mapToxml((JSONObject) object.get(key)));    }else if(object.get(key) instanceof JSONArray){    //如果是 JSONArray的话     StringBuilder builder2=new StringBuilder();    JSONArray array=(JSONArray) object.get(key);        if(array.isArray()){    int i=0;       for(Object obj : array) {       JSONObject objitem=(JSONObject) obj;       String attr="num='"+i+"'";              //如果有 id 的话 ,可以使用这个//       if(objitem.containsKey("id")){//       attr="id='"+objitem.getString("id")+"'";//       }              builder2.append("<item "+attr+">");   builder2.append(mapToxml(objitem));   builder2.append("</item>");   i++;    }    }    builder.append(builder2.toString());            }else{        builder.append(object.get(key));    }        builder.append("</"+key+">");    }return builder.toString();} }


4. 使用

  使用URL 传 type 参数 , 或者你调用的时候,将 type的值 写 固定!

   1) type=json : 生成json数据 ,

   2)type=xml : 生成xml数据 , 

   3)不传参或者 type传其他值,均为默认值

 示例格式:

http://localhost:8080/TennisGameSys/App_GetgameById?type=json&id=2

   4)在这里实现调用时 servlet 里,通过doGet() 方法中实现

  public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {          //设置编码  request.setCharacterEncoding("UTF-8");          response.setCharacterEncoding("UTF-8");          //获取 url参数          String id=request.getParameter("id");          String type=request.getParameter("type");                  //查询数据库                  GameManager gm=new GameManagerImpl();  Game g=gm.getGameById(Integer.parseInt(id));  //封装数据  String strs= AppUtil.toPrint(1,"success",g, type);  response.setContentType("text/"+type);  //输出数据  PrintWriter out=response.getWriter();  out.print(strs);  out.flush();  out.close();}


    测试结果:

{"data":{"competitorNum":30,"enrollDeadLine":"2015.8.1","gameLocation":"郑州体育中心","gamename":"百事创新网球大赛","gametime":"2015.8.26","id":2,"personNum":2},"code":1,"msg":"success"}



5.工具类下载

      http://download.csdn.net/detail/lablenet/9002325



0 0
原创粉丝点击