`
- 浏览:
254314 次
- 性别:
- 来自:
上海
-
import java.lang.reflect.*;
import java.util.*;


/** *//**
* @author 惠万鹏
* @time 2008-06-13
* @version 1.0
*/

public class JSON
{

/** *//**
* <p>
* 本方法用利用反射机制根据对像的域名获得PO的getter方法名
* </p>
*
* @param o
* :po对像
* @return getter方法名
*/

private synchronized static String[][] gFMs(Object o)
{
String[][] fms = null;
if (o != null)

{
Field flist[] = o.getClass().getDeclaredFields();
fms = new String[flist.length][2];
for (int i = 0; i < flist.length; i++)

{
fms[i] = JSON.assemblyFM(flist[i].toString());
}
}
return fms;
}


/** *//**
* <p>
* 根据域名组装域名和方法名
* </p>
*
* @param sfield
* @return
*/
private synchronized static String[] assemblyFM(String sfield)

{
String[] fm = new String[2];
int len = sfield.length();
int pointAt = sfield.lastIndexOf(".") + 1;
fm[0] = sfield.substring(pointAt, len);
fm[1] = String.valueOf(fm[0].charAt(0)).toUpperCase();
if (fm[0].length() > 1)

{
fm[1] += fm[0].substring(1, fm[0].length());
}
if (sfield.indexOf("boolean") > 0)

{
fm[1] = "is" + fm[1];
}
else

{
fm[1] = "get" + fm[1];
}
fm[1] += "()";
return fm;
}

/** *//**
* <p>po的方法里是否含有域的getter方法</p>
* @param fms
* @param method
* @return
*/
private static String getFN(String[][] fms, String method)

{
if(fms != null)

{
int len = method.length();
int pointAt = method.lastIndexOf(".") + 1;
String methodName = method.substring(pointAt, len);
for(int i = 0; i < fms.length; i++)

{
if(methodName.equals(fms[i][1]))

{
return fms[i][0];
}
}
}
return "";
}


/** *//**
* <p>得到单个po的json info</p>
* @param o
* @return
*/

private static String getJsonInfo(Object o)
{
StringBuffer jsonInfo = new StringBuffer("{");
String[][] fms = JSON.gFMs(o);

if(fms != null)
{
String fn = "";
String fv = "";
Method[] methods = o.getClass().getDeclaredMethods();
for(int i = 0; i < methods.length; i++)

{
fn = JSON.getFN(fms,methods[i].toString());
if(fn != null && !fn.equals(""))

{
jsonInfo.append("\"");
jsonInfo.append(fn);
jsonInfo.append("\"");
jsonInfo.append(":");
jsonInfo.append("\"");
try

{
fv = (String) methods[i].invoke(o, (Object[])null);
fv = fv == null ? "" : fv;
jsonInfo.append(fv);
}
catch(Exception e)

{
jsonInfo.append("");
}
jsonInfo.append("\",");
}
}
}
int len = jsonInfo.length();
String strEnd = jsonInfo.substring(len - 1, len);
if(strEnd != null && strEnd.equals(","))

{
jsonInfo.delete(len - 1, len);
}
jsonInfo.append("}");
return jsonInfo.toString();
}

/** *//**
* <p>得到一个集合的json信息</p>
* @param list
* @return
*/

public static String getJsonInfos(List<Object> list)
{
StringBuffer infos = new StringBuffer();
infos.append("[");
if(list != null)

{
Iterator<Object> itObj = list.iterator();
while(itObj.hasNext())

{
infos.append(JSON.getJsonInfo(itObj.next()));
if(itObj.hasNext())

{
infos.append(",");
}
}
}
infos.append("]");
return infos.toString();
}

public static void main(String[] args)
{
List<Object> list = new ArrayList<Object>();
PersonPO po = new PersonPO();
po.setAge("25");
po.setName("惠万鹏");
po.setSex("男");
list.add(po);
po = new PersonPO();
po.setAge("27");
po.setName("惠帆");
po.setSex("女");
list.add(po);
System.out.println(JSON.getJsonInfos(list));
}

}
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
Json与pickle数据序列化 软件目录结构规范 本周作业 第5周 心灵分享 ATM存钱取钱案例剖析 模块定义、导入、优化详解 内置模块详解之time与datetime模块 内置模块详解之Range模块 内置模块详解之OS模块 内置模块...
总的来说,这个压缩包中的资源可以帮助备考SCJP的学员巩固和理解Java编程的关键知识点,同时通过练习题答案来检验自己的学习效果。对于希望提升Java编程技能或者准备相关面试的人来说,也是非常有价值的参考资料。
- **Java反射技术**:深入理解反射机制,包括如何通过Class类获取对象信息、调用方法或设置属性等。 - **Java网络通信**(TCP和UDP):掌握TCP/IP协议的工作原理,学习Socket编程,同时了解UDP协议的特点及其适用...
1. **Ajax+JSON**:异步请求提升用户体验,JSON作为数据交换格式。 2. **jQuery**:简化JavaScript操作DOM、事件处理和动画。 3. **ExtJS**:构建桌面级Web应用的前端框架。 4. **Node.js**:基于Chrome V8引擎的...
05 迭代器协议和for循环工作机制 06 迭代器补充 07 三元运算,列表解析,生成器表达式 第19章 01 生成器函数 02 生成器函数的好处 03 母鸡下蛋的传说 04 生成器特性阐释 05 生产者消费者模型 06 第三次作业讲解 ...