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转换的必备库,无论是Jackson还是Gson,它们都能帮助开发者高效地完成JSON数据的处理。根据你的项目需求和团队偏好,选择合适的库并正确引入这些jar包,就可以方便...
自己有空时用java反射写的json转化工具,有不完善之处,多包涵
java对象转json所需要的包 解决JSONObject.fromObject()和JSONArray.fromObject()报 java.lang.NoClassDefFoundError的问题。 导入jar包后请 import net.sf.json.JSONArray; import net.sf.json.JSONObject;
总结,Java对象转JSON的过程主要包括创建Java对象,使用`JSONObject`将对象转换为JSON,最后将JSON对象转换为字符串进行传递。在Android环境中,虽然可以直接使用内置的`org.json`包,但考虑到功能和效率,推荐使用...
### Java对象转JSON工具类详解 #### 一、引言 在现代软件开发过程中,JSON(JavaScript Object Notation)作为一种轻量级的数据交换格式被广泛使用。它基于JavaScript的一个子集,采用完全独立于编程语言的文本...
3. **Json转对象** 反序列化JSON字符串回Java对象同样使用`ObjectMapper`: ```java Person deserializedPerson = mapper.readValue(jsonString, Person.class); ``` `readValue()`方法会将JSON字符串解析成`...
在Java开发中,将Java对象转换为JSON字符串或字符串数组是一项常见的任务,特别是在与前端交互、数据存储或者网络传输时。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也...
以上就是关于Java对象转JSON的基本知识,包括使用Jackson库进行转换、处理复杂对象、自定义序列化和反序列化,以及错误处理和性能优化。在具体项目中,根据实际需求选择合适的库和策略,可以有效提高开发效率和代码...
可能包含的方法有`toJson()`(将Java对象转换为JSON字符串)、`fromJson()`(将JSON字符串解析为Java对象)、`convertToMap()`(将JSON字符串转换为Map)以及`convertToList()`(将JSON字符串转换为List)等。...
1. 将Java对象转换为JSON字符串,同样使用`ObjectMapper`: ```java User john = new User(1, "John", "john@example.com"); String johnJson = mapper.writeValueAsString(john); ``` 2. 对于集合类型,如List或...
在Java中,我们经常需要将JSON字符串与Java对象进行相互转换,以便于数据的传输和处理。本篇文章将详细探讨这个过程,以及如何使用常见的Java JSON库,如Gson和Jackson,进行JSON与Java对象的转换。 首先,让我们...
Gson不仅支持对象转JSON,还支持JSON转对象。它的性能也相对较好,使用起来更为直接和方便。 3. FastJson:这是阿里巴巴开源的一个Java库,用于将Java对象转换成JSON格式的数据。FastJson具有很强的性能,并且在...
总的来说,Java对象转JSON过程中遇到的大数字精度丢失和科学记数法显示问题,主要是JavaScript引擎的限制所导致。通过将数字类型转换为字符串类型,可以有效地解决这个问题。在实际开发中,确保对大数字的处理方式有...
在处理JSON数据时,我们通常需要将Java对象转换为JSON字符串,或者将JSON字符串反序列化为Java对象。这个"Java对象与Json之间的互相转换的jar包"正是提供了这样的功能。 这个jar包可能包含了如Jackson、Gson、...
### JSON转Java对象 **2. JSON转Java对象** 将JSON字符串转换回Java对象同样简单,只需要指定目标类型。比如要从上面的JSON字符串恢复`Person`对象: ```java String jsonString = "{\"name\":\"张三\",\"age\":...
1. **JSON字符串转Java对象** 使用`json-lib`,我们可以将JSON字符串解析为JavaBean、HashMap、ArrayList等。例如,假设我们有一个JSON字符串`{"name":"John", "age":30}`,可以这样转换: ```java String json...
总结来说,`javaBean to json java对象转换 jar`这个主题涉及到Java对象的序列化、JSON数据格式以及Java的归档文件系统。通过使用类似`JsonFactory.toJson()`这样的方法,开发者可以方便地将JavaBean对象转换为JSON...
5. **反向操作:Java对象转JSON** 除了将JSON转换为Java对象,我们还可以使用`ObjectMapper`将Java对象转换回JSON字符串,这对于前端展示或存储数据非常有用: ```java String json = mapper.writeValueAsString...