import java.util.Map;
import java.beans.BeanInfo;
import java.beans.IntrospectionException;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.*;
public class JSON1 {
private static final String quote = "\"";
private static final String braceL = "{";
private static final String braceR = "}";
private static final String middleBraceL = "[";
private static final String middleBraceR = "]";
private static final String comma = ",";
private static final String colon = ":";
private static final String defaultDateFormat = "yyyy-MM-dd HH:mm:ss";
public static String toJsonString(Object obj) {
return toJsonString(obj, defaultDateFormat);
}
public static String toJsonString(Object obj, String dateFormat) {
StringBuilder sb = null;
try {
sb = parseObject(obj, dateFormat);
} catch (IntrospectionException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
if (null != sb && sb.length() > 0 && sb.substring(sb.length() - 1).equals(comma)) {
sb = new StringBuilder(sb.substring(0, sb.lastIndexOf(comma)));
}
return sb == null ? "" : sb.toString();
}
public static StringBuilder parseObject(Object object, String dateFormat) throws IntrospectionException, InvocationTargetException, IllegalAccessException {
StringBuilder sb = new StringBuilder();
if (canGetValue(object)) {
sb.append(getSimpleValue(object, dateFormat));
} else if (object instanceof List) {
//遇到list
sb.append(middleBraceL);
List list = (List) object;
for (Object o : list) {
sb.append(parseObject(o, dateFormat)).append(comma);
}
if (list.size() > 0) {
sb = new StringBuilder(sb.substring(0, sb.lastIndexOf(comma)));
}
sb.append(middleBraceR);
} else if (object instanceof Map) {
//遇到map
sb.append(braceL);
Map map = (Map) object;
Set<Map.Entry> entrySet = map.entrySet();
for (Map.Entry entry : entrySet) {
sb.append(quote).append(entry.getKey()).append(quote).append(colon);
sb.append(parseObject(entry.getValue(), dateFormat)).append(comma);
}
if (map.size() > 0) {
sb = new StringBuilder(sb.substring(0, sb.lastIndexOf(comma)));
}
sb.append(braceR);
} else if (object.getClass().isArray()) {
//遇到数组
sb.append(middleBraceL);
List list = Arrays.asList(object);
for (Object o : list) {
sb.append(parseObject(o, dateFormat)).append(comma);
}
if (list.size() > 0) {
sb = new StringBuilder(sb.substring(0, sb.lastIndexOf(comma)));
}
sb.append(middleBraceR);
} else {
//其他正常plain对象
BeanInfo beanInfo = Introspector.getBeanInfo(object.getClass()); // 获取类属性
PropertyDescriptor[] pds = beanInfo.getPropertyDescriptors();
sb.append(braceL);
for (PropertyDescriptor pd : pds) {
if (pd.getName().equals("class")) {
continue;
}
String key = pd.getName();
Method readMethod = pd.getReadMethod();
Object result = readMethod.invoke(object, null);
sb.append(quote).append(key).append(quote).append(colon);
sb.append(parseObject(result, dateFormat)).append(comma);
}
if (pds.length > 1) {
sb = new StringBuilder(sb.substring(0, sb.lastIndexOf(comma)));
}
sb.append(braceR);
}
return sb;
}
private static StringBuilder getSimpleValue(Object val, String dateFormat) {
if (null == val) {
return new StringBuilder("null");
}
StringBuilder sb = new StringBuilder();
if (needQuote(val)) {
sb.append(quote);
if (val instanceof Date) {
SimpleDateFormat sf = new SimpleDateFormat(dateFormat);
sb.append(new StringBuilder(sf.format(val)));
} else {
sb.append(val);
}
sb.append(quote);
} else {
sb.append(val);
}
return sb;
}
private static boolean needQuote(Object object) {
return object instanceof String || object instanceof Date;
}
private static boolean canGetValue(Object object) {
return object instanceof Boolean || object instanceof Character ||
object instanceof Byte || object instanceof Short ||
object instanceof Integer || object instanceof Double ||
object instanceof Long || object instanceof Date ||
object instanceof BigDecimal || object instanceof Float ||
object instanceof String || null == object;
}
public static void main(String[] args) {
// String[] ss = {"sdf", "dfd"};
// System.out.println(ss.getClass().isArray());
User user = new User(20, "yujun", "男");
User subUser = new User(2, "yuxx", "女");
user.setSubUser(subUser);
List<User> users = new ArrayList<User>();
User user1 = new User(1, "a", "n");
User user2 = new User(2, "b", "v");
User user3 = new User(3, "c", "n");
User user4 = new User(4, "d", "v");
user4.setSubUser(user);
users.add(user1);
users.add(user2);
users.add(user3);
users.add(user4);
Map<String, Object> m = new HashMap<String, Object>();
m.put("a", "dfsdf");
m.put("b", user);
m.put("c", users);
m.put("date", new Date());
//list
System.out.println(toJsonString(users));
//map
System.out.println(toJsonString(m));
//other obj
System.out.println(toJsonString(user));
}
}
class User {
private Integer age;
private String name;
private String sex;
private User subUser;
public User() {
}
public User(Integer age, String name, String sex) {
this.age = age;
this.name = name;
this.sex = sex;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public User getSubUser() {
return subUser;
}
public void setSubUser(User subUser) {
this.subUser = subUser;
}
}
分享到:
相关推荐
实现java对象转换json格式数据,非常方便 例如: List list=service.queryTasks(query); JSONArray json=JSONArray.fromObject(list); System.out.println(json);
1.一款将java对象转成json或是将json转成java对象的jar文件; 2.在网上找了半天才找到,希望大家共享; 3.使用方法,大家在网上随便找,很多,很简单,一看便会; 4.此包在eclipse中和AndroidStudio中都可以用,但是,你如果...
自己有空时用java反射写的json转化工具,有不完善之处,多包涵
java对象转json所需要的包 解决JSONObject.fromObject()和JSONArray.fromObject()报 java.lang.NoClassDefFoundError的问题。 导入jar包后请 import net.sf.json.JSONArray; import net.sf.json.JSONObject;
里面有好几个jar包 全部拷贝到工程里头就可以 很方便的进行对象转json了
一个自制的json转换jar 直接调用JsonFactory.toJson()方法可将javaBean转换成json
主要用于将java对象转换为json对象字符串,或字符串数组。
java对象转json问题.rar
json格式与java类对象相互转换。json格式转换成java类对象,List,Map。类对象转换成json。
通过gson.jar, 将java对象转换成json工具类
java有时候需要才传递json格式的数据参数,一个简单的实例根据一个对象生成Json格式的数据,不需要依靠任何jar包,普通的java工程,android中同样适用此方法,简单易懂
Json与java对象之间相互转换源码,测试,练习
里面有好几个jar包 全部拷贝到工程里头就可以 很方便的进行对象转json了 和AjaxJson数据交换
该工具类包括多重的json字符串或Map或List的相互转换,该文件包括主要的jar包,可以快捷的使用工具
接受对象转换为JSON数据格式并且作为字符串输出,map转换json,list转换json
主要介绍了Java对象转json的方法过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
主要介绍了Java对象转json JsonFormat注解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
Java对象与Json之间的互相转换的jar包,json是个非常重要的数据结构,在web开发中应用十分广泛。
下面小编就为大家带来一篇浅谈java对象转json, 数字精确出现丢失问题。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
1.解析json字符串 2.将json字符串转换为java对象 3.将java对象转换为json字符串