`
__SuRa丶Rain
  • 浏览: 44909 次
  • 性别: Icon_minigender_1
  • 来自: 火星
社区版块
存档分类
最新评论

自定义JSONUtil对象

    博客分类:
  • Json
阅读更多

 

Sturts2漏洞越来越多,所以博主特地放弃了Struts2,

 

开始使用Spring MVC,虽然各种不适应,但是还是解决了不少问题

 

为了解决Spring MVC和Json不和谐的问题,特地自己写了个JSONUtil对象,方便进行前台交互。

import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;

public class JSONUtil {
	public static String DATE_FORMAT = "yyyy-MM-dd HH:mm:ss";
	
	public static String serialize(Object o,StringBuffer s,Class<?>... parseClazz) throws Exception{
		Class<?> clazz = o.getClass();
		
		List<Class<?>> context = new ArrayList<Class<?>>();
		for(Class<?> c :parseClazz){
			context.add(c);
		}
		
		if(clazz.isArray()){
			s.append("[");
			for(Object sub:(Object[])o){
				JSONUtil.covert(sub, context, s, parseClazz);
				s.append(",");
			}
			s.delete(s.length()-1, s.length());
			s.append("]");
		} else if(o instanceof Collection<?>){
			s.append("[");
			
			Collection<?> collection = (Collection<?>) o;
			for(Iterator<?> iterator = collection.iterator();iterator.hasNext();){
				JSONUtil.covert(iterator.next(), context, s, parseClazz);
				s.append(",");
			}
			s.delete(s.length()-1, s.length());
			s.append("]");
		} else {
			s=JSONUtil.covert(o, context, s, parseClazz);
		}
		return s.toString();
	}
	
	private static StringBuffer covert(Object o,List<Class<?>> context,StringBuffer s,Class<?>... parseClazz) throws Exception{
		Class<?> clazz = o.getClass();
		s.append("{");
		
		PropertyDescriptor[] props = Introspector.getBeanInfo(clazz).getPropertyDescriptors();
		for (PropertyDescriptor prop : props) {
			
			if (prop.getReadMethod() != null && prop.getReadMethod().invoke(o) != null&& !"class".equals(prop.getDisplayName())) {
				
				s.append("\"").append(prop.getName()).append("\"").append(":");
				
				Object value = prop.getReadMethod().invoke(o);
				
				if(prop.getPropertyType() == String.class
						|| prop.getPropertyType() == Boolean.class
						|| prop.getPropertyType() == boolean.class
						|| prop.getPropertyType() == Character.class
						|| prop.getPropertyType() == char.class){
					s.append("\"").append(value).append("\"");
				} else if (isWrapClass(prop.getPropertyType())
						|| prop.getPropertyType().isPrimitive()){
					s.append(value);
				} else if(value.getClass() == java.util.Date.class || value.getClass() == java.sql.Date.class || value.getClass() == java.sql.Timestamp.class){
					s.append("\"").append(new SimpleDateFormat(DATE_FORMAT).format(value)).append("\"");
				} else if(prop.getPropertyType() == clazz){
					s.delete(s.lastIndexOf(","), s.length());
				} else if(context.contains(prop.getPropertyType())
						|| (value.getClass().isArray() && ((Object[])value).length>0 && context.contains(((Object[])value)[0].getClass()))
						|| value instanceof Collection<?>){
					JSONUtil.serialize(value,s,parseClazz);
				} else {
					s.delete(s.lastIndexOf(","), s.length());
				}
				s.append(",");
			}
		}
		
		s.delete(s.length()-1, s.length());
		s.append("}");
		
		return s;
	}
	
	private static boolean isWrapClass(Class<?> clazz){  
	    try {  
	        return ((Class<?>)clazz.getField("TYPE").get(null)).isPrimitive();
	    } catch (Exception e){  
	        return false;  
	    }  
	}
}

 

 

分享到:
评论

相关推荐

    JsonUtil工具类

    而JsonUtil工具类则是开发者为了简化JSON与Java对象之间的转换而创建的,它极大地提高了开发效率。本文将详细探讨JsonUtil及其相关库的使用和原理。 首先,JsonUtil工具类通常依赖于一些第三方库,如Jackson、Gson...

    自定义注解结合Hutool对SpringBoot接口返回数据进行脱敏

    自定义注解结合Hutool对SpringBoot接口返回数据进行脱敏 自定义注解结合Hutool对SpringBoot接口返回数据进行脱敏 自定义注解结合Hutool对SpringBoot接口返回数据进行脱敏 自定义注解结合Hutool对SpringBoot接口返回...

    Java的JsonUtil

    JSONUtil是Java中用于处理JSON数据的工具类,通常用于将Java对象转换为JSON字符串,或者将JSON字符串反序列化为Java对象。这个过程在Java中被称为对象序列化和反序列化。 Java的`JsonUtil`类通常是自定义的工具类,...

    Json转对象忽略大小写

    标题“Json转对象忽略大小写”所涉及的知识点主要是如何在Java中处理这种情况,让JSON解析器在转换JSON字符串到Java对象时忽略大小写。 描述中提到,开发人员在处理JSON时遇到了首字母大写的键,这通常会导致默认的...

    Java实现的JSONUtil工具类与用法示例

    JSONUtil工具类是Java开发中处理JSON数据的一种实用工具,它简化了JSON对象与Java对象之间的转换过程。在本文中,我们将深入探讨JSONUtil工具类的实现和使用方法,以及如何利用阿里巴巴的Fastjson库来增强JSON操作。...

    JsonUtils(Json转换工具类)

    这个方法可以将符合JSON格式的字符串解析成指定类型的Java对象,例如,将一个JSON字符串转换为自定义的User类实例。 2. **Json生成**: 反之,`toJson(Object obj)`方法则用于将Java对象转化为JSON字符串。这对于...

    自己实现的Android中将任意实体类(Entity、vo、dto、Model)对象(object)转为Json字符串的一个类

    这个工具类“JsonUtil”是为了帮助开发者快速将Android中的实体类对象(Entity、VO、DTO、Model)转化为JSON字符串,方便进行网络请求或存储数据。 一、JsonUtil类的设计与实现 JsonUtil通常是一个静态类,包含一...

    JSON字符转JSON对象

    `JsonUtil.java` 文件很可能是一个自定义的工具类,它封装了Fastjson的一些常用操作,如将JSON字符串转换为Java对象,或者将Java对象转换为JSON字符串。下面是一些可能在`JsonUtil.java`中实现的方法: 1. `...

    各种对象转成JSON字符串 (2).docx

    这些转换方法是通过自定义的`JSONUtil`类实现的,它没有依赖特定的JSON库,而是手动实现了对象到JSON字符串的转换。在实际项目中,开发者通常会选择已有的成熟库,如Jackson、Gson或FastJSON,它们提供了更强大、更...

    struts2与json插件(2)

    博客链接中提到的ITEYE博客可能详细分析了`JsonUtils.java`的实现细节,包括如何处理复杂类型的序列化,如日期、集合和自定义对象,以及如何处理JSON序列化过程中的异常。 在实际开发中,理解`JsonUtils`的工作原理...

    json 转化工具类

    这里提到的`JsonUtil`可能是其中一个库的工具类,或者是一个自定义的工具类。这类工具类通常提供了一系列静态方法,方便开发者进行JSON与Java对象之间的相互转换。 1. **Jackson库**:Jackson是Java中最常用的JSON...

    Json转对象所以jar

    JSON(JavaScript Object Notation)是一种轻量级...记住,这只是一个基础示例,实际应用中可能需要处理更复杂的JSON结构,例如嵌套的对象和数组,这时可能需要自定义转换规则或使用更高级的JSON库,如Jackson或Gson。

    Json工具类使用.docx

    `JSONUtil` 类就是一个这样的工具类,它提供了将Java对象转换为JSON对象的功能,并且特别地,它还支持Hibernate的延迟加载对象。 在描述中提到的`JSONUtil`类,它的主要功能是通过反射机制将Java对象转换为JSON格式...

    Java 和 Json 对象转换的包

    - 提到的`JsonUtil.java`文件可能是博主自定义的工具类,封装了上述库的一些功能,以简化JSON操作。 - 它可能包含静态方法,如`toJson()`和`fromJson()`,以方便在项目中使用。 7. **注意事项** - JSON数据类型...

    JAVA-JSON工具转换类

    `JsonUtil.java`看起来是一个自定义的工具类,很可能包含了对`json-lib`和`ezmorph`的封装,提供了简洁易用的API供开发者进行JSON操作。可能包含的方法有`toJson()`(将Java对象转换为JSON字符串)、`fromJson()`...

    commonUtils:httpUtil和jsonUtil,TcpClientUtil,webSocketUtil

    - **应用场景**:设备间的通信、自定义协议的应用、游戏服务器、物联网设备等。 在`commonUtils-master`这个项目中,你可以找到这些工具类的源代码,学习它们的实现细节,以便在自己的项目中进行复用或参考。对于...

    各种对象转成JSON字符串.docx

    代码中定义了一个名为`JSONUtil`的工具类,它包含了一个核心方法`object2json`,该方法接受一个`Object`作为参数,并根据对象的类型将其转换为JSON字符串。以下是该方法的主要逻辑: 1. 如果对象为`null`,则返回空...

    java处理JSON格式数据的通用类

    - **日期处理:**`JsonUtil`类集成了自定义的日期处理器`DateJsonValueProcessor`,以确保日期类型的正确转换。 - **依赖管理:**该类依赖于`net.sf.json`库,这是一个轻量级的JSON处理库。 #### 五、总结 通过上述...

    java自己修改的支持public属性、父类属性的json自动编译的工具类

    综上所述,`JsonUtil`是一个自定义的工具类,它利用Java反射API实现了对包含public属性和父类属性的Java对象的JSON序列化和反序列化。理解和使用这个类需要对Java反射、JSON处理以及可能使用的库(如Jackson或Gson)...

    java中json处理的使用.pdf

    `JsonUtil` 类是为了解决Java中JSON对象与Java对象之间的转换问题。下面我们将详细探讨这个类中的三个主要方法: 1. `getObject4JsonString` 方法: 这个方法的作用是从一个JSON字符串转换为指定类型的Java对象。...

Global site tag (gtag.js) - Google Analytics