不想用第三方的自己写个简单的javaBean转json的公共函数库好了
解决方案 »
- 为什么药覆盖clone()方法
- 我用的是myeclipse9.0 sqlserver 2008 jdbc 连接的时候出现这种错误
- yige
- struts2 action实例 拦截器堆栈 相关疑问
- 请帮我推荐款开源得免费得java 反编译软件
- 怎么验证客户端某已知完全路径的文件是否存在?
- 请问struts用到哪些技术?
- cos上传出错
- 读一次数据库,想根据不同条件过滤记录集,请问如何设置ResoultSet记录集的过滤条件?
- javaBean与持久对象的异同
- 为什么struts2和springmvc 是线程安全的 struts1不是线程安全的 为什么会产生线程安全问题 谁能讲下嘛
- java做图形报表.哪个插件好?
for (Object[] obj : clients) {
json += "{\"clientId\":\"" + obj[0] + "\",\"clientName\":\""
+ obj[1] + "\",\"clientType\":\"" + obj[2]
+ "\",\"clientTel\":\"" + obj[3]
+ "\",\"clientAddress\":\"" + obj[4]
+ "\",\"clientMan\":\"" + obj[5]
+ "\",\"clientEmail\":\"" + obj[6]
+ "\",\"clientComment\":\"" + obj[7] + "\"},";
}
String finalJson = json.substring(0, json.length() - 1) + "]}";
for (Object[] obj : clients) {
json += "{\"clientId\":\"" + obj[0] + "\",\"clientName\":\""
+ obj[1] + "\",\"clientType\":\"" + obj[2]
+ "\",\"clientTel\":\"" + obj[3]
+ "\",\"clientAddress\":\"" + obj[4]
+ "\",\"clientMan\":\"" + obj[5]
+ "\",\"clientEmail\":\"" + obj[6]
+ "\",\"clientComment\":\"" + obj[7] + "\"},";
}
String finalJson = json.substring(0, json.length() - 1) + "]}";
就是这个样子。和我想的一样
String jsonString="{\"user\":{\"id\":\"123\",\"name\":\"JSONServlet\",\"say\":\"Hello , i am a servlet !\",\"password\":\"JSON\"},\"success\":true}";
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.lang.reflect.Array;
import java.lang.reflect.Method;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;import com.entity.Person;
import com.entity.User;
public class JsonUtils {
public static String toJsonString(Object obj) throws Exception{
if(obj==null)//没有值的时候直接返回null
return null;
Class<?> clazz=obj.getClass();
if(clazz==String.class||clazz==Character.class||clazz==char.class)//字符或字符串的都用“”包裹返回
return "\""+obj+"\"";
if(clazz==int.class||clazz==long.class||clazz==float.class||clazz==double.class||
Number.class.isAssignableFrom(clazz) ||clazz==boolean.class||clazz==Boolean.class)//数字的直接返回
return obj.toString();
if(clazz.isArray()||Collection.class.isAssignableFrom(clazz))//数组或集合的转换
return arrayToJson(obj);
if(Map.class.isAssignableFrom(clazz))//Map的转换
return mapToJson((Map)obj);
return objectToJson(obj);//对象的转换
}
//对象的转换用{}包起来,利用反射对象所有属性进行json输出
private static String objectToJson(Object obj) throws Exception{
StringBuilder sb=new StringBuilder();
Class<?> cls=obj.getClass();
BeanInfo beanInfo=Introspector.getBeanInfo(cls, Object.class);
PropertyDescriptor[] pds=beanInfo.getPropertyDescriptors();
sb.append("{");
for(int i=0;i<pds.length;i++){
PropertyDescriptor pd=pds[i];
String key=pd.getName();
Method method=pd.getReadMethod();
Object value=method.invoke(obj);
//递归调用toJsonString用于处理值可能又是对象或者map或者数组
sb.append(key).append(":").append(toJsonString(value));
if(i!=pds.length-1)
sb.append(",");
}
sb.append("}");
return sb.toString();
}
//数组转json用[]包起来
private static String arrayToJson(Object obj) throws Exception{
StringBuilder sb=new StringBuilder();
sb.append("[");
Class<?> cls=obj.getClass();
int len=0,i=0;
//数组的利用Array的api取数组各元素的值,同样递归调用toJsonString以便处理又是对象或者数组或者map
if(cls.isArray()){
len=Array.getLength(obj);
for(;i<len;i++){
Object value=Array.get(obj, i);
sb.append(toJsonString(value));
if(i!=len-1)
sb.append(",");
}
}else if(Collection.class.isAssignableFrom(cls)){
//集合的利用Iterator的api取数组各元素的值,同样递归调用toJsonString以便处理又是对象或者数组或者map
Collection col=(Collection)obj;
Iterator it=col.iterator();
len=col.size();
for(;i<len;i++){
Object value=it.next();
sb.append(toJsonString(value));
if(i!=len-1)
sb.append(",");
}
}
sb.append("]");
return sb.toString();
}
//map转json和对象转json类似,只是不用反射,用map的key和value生成
private static String mapToJson(Map map) throws Exception{
StringBuilder sb=new StringBuilder();
sb.append("{");
Set keys=map.keySet();
Iterator it=keys.iterator();
int len=keys.size();
for(int i=0;i<len;i++){
Object key=it.next();
Object value=map.get(key);
sb.append(toJsonString(key)).append(":").append(toJsonString(value));
if(i!=len-1)
sb.append(",");
}
sb.append("}");
return sb.toString();
}
}测试public class User{
private Integer id;
private String name;
private Address address;
set,get
}
public class Address{
private String address;
set,get
}
public static void main(String[] args) throws Exception{
User user=new User();
user.setId(1);
user.setName(2);
String json=JsonUtils.toJsonString();
System.out.println("单一对象----------"+json);
Address address=new Address();
address.setAddress("测试地址");
user.setAddress(address);
json=JsonUtils.toJsonString();
System.out.println("符合对象----------"+json);
List<User> list=new ArrayList<User>();
json=JsonUtils.toJsonString();
System.out.println("集合对象----------"+json);
}
你写的和json的包也没什么区别...本来转json的逻辑就不复杂