Java-封装生成JSON数据和XML数据类
json
适用于现代 C++ 的 JSON。
项目地址:https://gitcode.com/gh_mirrors/js/json
免费下载资源
·
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
GitHub 加速计划 / js / json
41.72 K
6.61 K
下载
适用于现代 C++ 的 JSON。
最近提交(Master分支:1 个月前 )
960b763e
4 个月前
8c391e04
6 个月前
更多推荐
已为社区贡献12条内容
所有评论(0)