﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-xuwenhao2002-文章分类-java</title><link>http://www.blogjava.net/xuwenhao2002/category/42523.html</link><description /><language>zh-cn</language><lastBuildDate>Tue, 04 May 2010 13:41:06 GMT</lastBuildDate><pubDate>Tue, 04 May 2010 13:41:06 GMT</pubDate><ttl>60</ttl><item><title>自己动手写的生成json的工具类。能够动态的添加属性，属性过滤，属性名称映射</title><link>http://www.blogjava.net/xuwenhao2002/articles/317754.html</link><dc:creator>xuwenhao</dc:creator><author>xuwenhao</author><pubDate>Thu, 08 Apr 2010 12:07:00 GMT</pubDate><guid>http://www.blogjava.net/xuwenhao2002/articles/317754.html</guid><wfw:comment>http://www.blogjava.net/xuwenhao2002/comments/317754.html</wfw:comment><comments>http://www.blogjava.net/xuwenhao2002/articles/317754.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/xuwenhao2002/comments/commentRss/317754.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/xuwenhao2002/services/trackbacks/317754.html</trackback:ping><description><![CDATA[<p>public class CreateJsonData<br />
{</p>
<p>&nbsp;private static final String stringType = "java.lang.String";<br />
&nbsp;private static final String intType = "int";<br />
&nbsp;private static final String doubleType = "double";</p>
<p>&nbsp;private static final String floatType = "float";<br />
&nbsp;private static final String longType = "long";<br />
&nbsp;private static final String booleanType = "boolean";</p>
<p>&nbsp;private static final String objectIntType = "java.lang.Integer";<br />
&nbsp;private static final String objectBooleanType = "java.lang.Boolean";<br />
&nbsp;private static final String objectDoubleType = "java.lang.Double";<br />
&nbsp;private static final String objectFloatType = "java.lang.Float";<br />
&nbsp;private static final String objectLongType = "java.lang.Long";</p>
<p>&nbsp;private static final String[] basicTypes = {intType, objectIntType,<br />
&nbsp;&nbsp;&nbsp;floatType, longType, booleanType, doubleType, objectBooleanType,<br />
&nbsp;&nbsp;&nbsp;objectDoubleType, objectFloatType, objectLongType};<br />
&nbsp;private static final String listType="java.util.List";</p>
<p>&nbsp;/*<br />
&nbsp; * @desc 取得对象的set方法名称<br />
&nbsp; */<br />
&nbsp;private static Map&lt;String, String&gt; getFieldNames(Object obj)<br />
&nbsp;{<br />
&nbsp;&nbsp;Class&lt;? extends Object&gt; cla = obj.getClass();<br />
&nbsp;&nbsp;Field field[] = cla.getDeclaredFields();<br />
&nbsp;&nbsp;Map&lt;String, String&gt; map = new HashMap&lt;String, String&gt;(0);<br />
&nbsp;&nbsp;for (int i = 0; i &lt; field.length; i++)<br />
&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;String name = field[i].getName();<br />
&nbsp;&nbsp;&nbsp;String str = name.substring(0, 1).toUpperCase() + name.substring(1);<br />
&nbsp;&nbsp;&nbsp;map.put("get" + str, field[i].getType().getName());<br />
&nbsp;&nbsp;}<br />
&nbsp;&nbsp;return map;<br />
&nbsp;}<br />
&nbsp;/*<br />
&nbsp; * @desc调用Bean的get方法生成json数据格式<br />
&nbsp; * <br />
&nbsp; * @Par obj Bean对象<br />
&nbsp; * <br />
&nbsp; * @par map get方法名和返回参数类型<br />
&nbsp; * <br />
&nbsp; * @par config 原有字段与自定义字段的映射关系<br />
&nbsp; * <br />
&nbsp; * @par filter 过滤字段集合<br />
&nbsp; */</p>
<p>&nbsp;private static boolean isFilter(List&lt;String&gt; list,String fieldName)<br />
&nbsp;{<br />
&nbsp;&nbsp;boolean isTag = false;<br />
&nbsp;&nbsp;for (int i = 0; i &lt; list.size(); i++)<br />
&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;if (fieldName.equals(list.get(i)))<br />
&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;isTag = true;<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;if (isTag)<br />
&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;break;<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;}<br />
&nbsp;&nbsp;return isTag;<br />
&nbsp;}<br />
&nbsp;/*<br />
&nbsp; * @desc返回json数据<br />
&nbsp; */<br />
&nbsp;public static String objectToJson(Object obj,ConfigData config) throws Exception<br />
&nbsp;{<br />
&nbsp;&nbsp;String jsonStr=invok(obj,config);<br />
&nbsp;&nbsp;if(!(config.getDynicMap().isEmpty()))<br />
&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;jsonStr=jsonStr.substring(0,jsonStr.length()-1);<br />
&nbsp;&nbsp;}<br />
&nbsp;&nbsp;Map&lt;String,Object&gt; dynicMap=config.getDynicMap();<br />
&nbsp;&nbsp;for(Entry&lt;String,Object&gt; entry:dynicMap.entrySet())<br />
&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;jsonStr=jsonStr+execute(entry.getValue(),entry.getKey());<br />
&nbsp;&nbsp;}<br />
&nbsp;&nbsp;if(!(config.getDynicMap().isEmpty()))<br />
&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;jsonStr=jsonStr+"}";<br />
&nbsp;&nbsp;}<br />
&nbsp;&nbsp;return jsonStr;<br />
&nbsp;}<br />
&nbsp;private static String execute(Object obj,String property) throws Exception<br />
&nbsp;{<br />
&nbsp;&nbsp;Map&lt;String,String&gt; map=getFieldNames(obj);<br />
&nbsp;&nbsp;Class&lt;? extends Object&gt; cla = obj.getClass();<br />
&nbsp;&nbsp;String jsonStr = ","+property+":{";<br />
&nbsp;&nbsp;for(Entry&lt;String,String&gt; entry:map.entrySet())<br />
&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;Method method = cla.getDeclaredMethod(entry.getKey());<br />
&nbsp;&nbsp;&nbsp;String fieldName = methodToField(entry.getKey());<br />
&nbsp;&nbsp;&nbsp;Object object = method.invoke(obj);<br />
&nbsp;&nbsp;&nbsp;Object ob = object == null ? "" : object;<br />
&nbsp;&nbsp;&nbsp;if (isBasicType(entry.getValue()))<br />
&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;jsonStr = jsonStr + "\"" + fieldName + "\":" + ob.toString()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+ ",";<br />
&nbsp;&nbsp;&nbsp;} <br />
&nbsp;&nbsp;&nbsp;else if (isStringType(entry.getValue()))<br />
&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;jsonStr = jsonStr + "\"" + fieldName + "\":\"" + ob.toString()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+ "\",";<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;else<br />
&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;Object obb = Class.forName(entry.getValue()).newInstance();<br />
&nbsp;&nbsp;&nbsp;&nbsp;jsonStr = jsonStr + "\"" + fieldName + "\":"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+ execute(obb,fieldName) + ",";<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;}<br />
&nbsp;&nbsp;jsonStr = jsonStr.substring(0, jsonStr.length() - 1);<br />
&nbsp;&nbsp;jsonStr = jsonStr + "}";<br />
&nbsp;&nbsp;return jsonStr;<br />
&nbsp;}<br />
&nbsp;<br />
&nbsp;private static String invok(Object obj,ConfigData config) throws Exception<br />
&nbsp;{<br />
&nbsp;&nbsp;Map&lt;String,String&gt; map=getFieldNames(obj);<br />
&nbsp;&nbsp;Class&lt;? extends Object&gt; cla = obj.getClass();<br />
&nbsp;&nbsp;String jsonStr = "{";<br />
&nbsp;&nbsp;for (Entry&lt;String, String&gt; b : map.entrySet())<br />
&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;Method method = cla.getDeclaredMethod(b.getKey());<br />
&nbsp;&nbsp;&nbsp;String fieldName = methodToField(b.getKey());<br />
&nbsp;&nbsp;&nbsp;/*<br />
&nbsp;&nbsp;&nbsp; * 属性过滤<br />
&nbsp;&nbsp;&nbsp; */<br />
&nbsp;&nbsp;&nbsp;boolean isTag = isFilter(config.getFilterList(),fieldName);<br />
&nbsp;&nbsp;&nbsp;if (isTag)<br />
&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;continue;<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;/*<br />
&nbsp;&nbsp;&nbsp; * 属性映射<br />
&nbsp;&nbsp;&nbsp; */<br />
&nbsp;&nbsp;&nbsp;fieldName = config.getMap().get(fieldName) == null ? fieldName : config.getMap()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;.get(fieldName);<br />
&nbsp;&nbsp;&nbsp;Object object = method.invoke(obj);<br />
&nbsp;&nbsp;&nbsp;Object ob = object == null ? "" : object;<br />
&nbsp;&nbsp;&nbsp;if (isBasicType(b.getValue()))<br />
&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;jsonStr = jsonStr + "\"" + fieldName + "\":" + ob.toString()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+ ",";<br />
&nbsp;&nbsp;&nbsp;} <br />
&nbsp;&nbsp;&nbsp;else if (isStringType(b.getValue()))<br />
&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;jsonStr = jsonStr + "\"" + fieldName + "\":\"" + ob.toString()<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+ "\",";<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;else<br />
&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;Object obb = Class.forName(b.getValue()).newInstance();<br />
&nbsp;&nbsp;&nbsp;&nbsp;jsonStr = jsonStr + "\"" + fieldName + "\":"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;+ invok(obb, config) + ",";<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;}<br />
&nbsp;&nbsp;jsonStr = jsonStr.substring(0, jsonStr.length() - 1);<br />
&nbsp;&nbsp;jsonStr = jsonStr + "}";<br />
&nbsp;&nbsp;return jsonStr;<br />
&nbsp;}<br />
&nbsp;/*<br />
&nbsp; * @desc 验证参数类型是否为:int,float,double,long,boolean return true 是 return false<br />
&nbsp; * 不是<br />
&nbsp; */<br />
&nbsp;private static boolean isBasicType(String type)<br />
&nbsp;{<br />
&nbsp;&nbsp;boolean isType = false;<br />
&nbsp;&nbsp;for (int i = 0; i &lt; basicTypes.length; i++)<br />
&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;if (basicTypes[i].equals(type))<br />
&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;isType = true;<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;}<br />
&nbsp;&nbsp;return isType;<br />
&nbsp;}<br />
&nbsp;/*<br />
&nbsp; * 验证参数类型是否为:String类型 return true 是 return false 不是<br />
&nbsp; */<br />
&nbsp;private static boolean isStringType(String type)<br />
&nbsp;{<br />
&nbsp;&nbsp;boolean isType = false;<br />
&nbsp;&nbsp;if (stringType.equals(type))<br />
&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;isType = true;<br />
&nbsp;&nbsp;}<br />
&nbsp;&nbsp;return isType;<br />
&nbsp;}<br />
&nbsp;/*<br />
&nbsp; * @desc 根据set方法名获取字段名称<br />
&nbsp; */<br />
&nbsp;private static String methodToField(String methodName)<br />
&nbsp;{<br />
&nbsp;&nbsp;String name = methodName.substring(3);<br />
&nbsp;&nbsp;String field = name.substring(0, 1).toLowerCase() + name.substring(1);<br />
&nbsp;&nbsp;return field;<br />
&nbsp;}<br />
&nbsp;<br />
&nbsp;public static String arrayToJson(Object obj,ConfigData config) throws JsonException<br />
&nbsp;{<br />
&nbsp;&nbsp;Class&lt;? extends Object&gt; cla=obj.getClass();<br />
&nbsp;&nbsp;Class&lt;? extends Object&gt;[] clas=cla.getInterfaces();<br />
&nbsp;&nbsp;boolean isTag=false;<br />
&nbsp;&nbsp;String jsonStr="[";<br />
&nbsp;&nbsp;for(int i=0;i&lt;clas.length;i++)<br />
&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;if(clas[i].getName().equals(listType))<br />
&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;isTag=true;<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;}<br />
&nbsp;&nbsp;if(!isTag)<br />
&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;throw new JsonException("该类没有实现List接口 ");<br />
&nbsp;&nbsp;}<br />
&nbsp;&nbsp;try<br />
&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;Method method=cla.getDeclaredMethod("size");<br />
&nbsp;&nbsp;&nbsp;Object object=method.invoke(obj);<br />
&nbsp;&nbsp;&nbsp;int size=Integer.parseInt(object.toString());<br />
&nbsp;&nbsp;&nbsp;for(int i=0;i&lt;size;i++)<br />
&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;method=cla.getDeclaredMethod("get",int.class);<br />
&nbsp;&nbsp;&nbsp;&nbsp;Object obb=method.invoke(obj,i);<br />
&nbsp;&nbsp;&nbsp;&nbsp;jsonStr=jsonStr+objectToJson(obb,config)+",";<br />
&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;jsonStr = jsonStr.substring(0, jsonStr.length() - 1);<br />
&nbsp;&nbsp;&nbsp;jsonStr=jsonStr+"]";<br />
&nbsp;&nbsp;} catch (SecurityException e)<br />
&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />
&nbsp;&nbsp;} catch (NoSuchMethodException e)<br />
&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;e.printStackTrace();<br />
&nbsp;&nbsp;}<br />
&nbsp;&nbsp; catch (InvocationTargetException e)<br />
&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp; e.printStackTrace();<br />
&nbsp;&nbsp; }<br />
&nbsp;&nbsp; catch(IllegalAccessException e)<br />
&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp; e.printStackTrace();<br />
&nbsp;&nbsp; }<br />
&nbsp;&nbsp; catch(Exception e)<br />
&nbsp;&nbsp; {<br />
&nbsp;&nbsp;&nbsp; e.printStackTrace();<br />
&nbsp;&nbsp; }<br />
&nbsp;&nbsp;return jsonStr;<br />
&nbsp;}<br />
}</p>
<img src ="http://www.blogjava.net/xuwenhao2002/aggbug/317754.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/xuwenhao2002/" target="_blank">xuwenhao</a> 2010-04-08 20:07 <a href="http://www.blogjava.net/xuwenhao2002/articles/317754.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>