`
307622798
  • 浏览: 10927 次
社区版块
存档分类
最新评论

Json补充

    博客分类:
  • Ajax
阅读更多
昨天谈到通过一个类的方法构建一个JSON字符串,后来发现昨天写的那个方法局限性很大,因为我只能传一个list对象过去,而且list集合里面的对象必须为实体类对象,因此使用昨天的那个方法很有可能会造成异常,程序的可扩展性也不是很强,所以今天上午花了一个上午的时间对昨天的程序进行了改进,可以说比昨天的代码有了明显的扩展,对任何对象都适用吧,当然本人也没有进行大量的测试,如果出现bug还希望网友们能提出来,本人好进行改进,谢谢!
代码如下:
package com.csu.util;

import java.lang.reflect.Array;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;

public class CreateJSON {
	
	public String createObjToJson(Object obj,String JsonName) {
		StringBuffer strBuff = new StringBuffer();
		//判断items是不是Map类
		if(obj instanceof Map<?,?>) {
			Map myMap = (Map)obj;
			strBuff.append(this.createMapToJson(myMap, JsonName));
		}
		//判断items对象是不是集合类
		else if(obj instanceof Collection<?>) {
			Collection<?> coList = (Collection<?>)obj;
			//直接调用相关方法
			strBuff.append(this.createByReflect(coList, JsonName));
		}
		//判断items对象是不是数组。
		else if(obj.getClass().isArray()) {
			strBuff.append(this.createArrayToJson(obj, JsonName));
		}
		//否则为普通对象
		else {
			strBuff.append(this.createNomalObjToJson(obj, JsonName));
		}
		
		return strBuff.toString();
	}
	
	//如果一个对象不是集合类对象,也不是Map类,也不是数组类型
	public String createNomalObjToJson(Object obj,String JsonName) {
		StringBuffer strBuff = new StringBuffer();
		strBuff.append("{");
		// 得到该对象的类
		Class<?> vo = obj.getClass();
		//判断该对象是否为八个数据类型 如果是基本数据类型则直接输出{JsonName:"vo"}
		if(vo.isPrimitive() || vo == String.class
				|| vo == Integer.class || vo == Float.class
				|| vo == Double.class || vo == Long.class
				|| vo == Byte.class || vo == Short.class
				|| vo == Boolean.class
				|| vo == Character.class) {
			return "{\"" + JsonName + "\":\"" + vo + "\"}";
		}
		// 得到该对象的所有的字段
		Field[] fields = vo.getDeclaredFields();
		String methodName = null;
		String fieldName = null;
		for (int i = 0; i < fields.length; i++) {
			// 得到字段名
			fieldName = fields[i].getName();
			// 得到该字段的数据类型
			Class<?> fieldType = fields[i].getType();
			// 得到该字段的get方法的方法名
			methodName = "get" + fieldName.substring(0, 1).toUpperCase()
					+ fieldName.substring(1);
			Method method = null;
			Object fieldValue = null;
			try {
				method = vo.getMethod(methodName, new Class[] {});
				fieldValue = method.invoke(obj);
			} catch (SecurityException e1) {
				e1.printStackTrace();
			} catch (NoSuchMethodException e1) {
				e1.printStackTrace();
			} catch (IllegalArgumentException e) {
				e.printStackTrace();
			} catch (IllegalAccessException e) {
				e.printStackTrace();
			} catch (InvocationTargetException e) {
				e.printStackTrace();
			}
			
			// 将字段名加到字符串中去
			strBuff.append("\"");
			strBuff.append(fieldName);
			strBuff.append("\":");
			// 判断该字段的数据类型是不是Object类型,是对象类型的话,还得创建该对象的数据,即递归调用本方法
			if (!fieldType.isPrimitive() && fieldType != String.class
					&& fieldType != Integer.class && fieldType != Float.class
					&& fieldType != Double.class && fieldType != Long.class
					&& fieldType != Byte.class && fieldType != Short.class
					&& fieldType != Boolean.class
					&& fieldType != Character.class) {
				if(fieldValue == null) {
					strBuff.append("{}");
				}else {
					strBuff.append(this.createObjToJson(fieldValue,fieldName));				}
			}
			else {
					strBuff.append("\"");
					strBuff.append(fieldValue.toString());
					strBuff.append("\"");
			}
			strBuff.append(",");
		}
		strBuff.deleteCharAt(strBuff.length() - 1);
		strBuff.append("}");
		return strBuff.toString();
	}
	
	//创建一个Map对象的JSON字符串
	public String createMapToJson(Map obj,String JsonName) {
		StringBuffer strBuff = new StringBuffer();
		// 如果传过来的数据长度为0则表示没有数据传过来,直接返回一个{"JsonName":[]}
		if (obj.size() == 0)
			return "{\"" + JsonName + "\":[]}";
		// 否则开始构建字符串
		strBuff.append("{\"" + JsonName + "\":[");
		Set<Map.Entry> mapEntry = obj.entrySet();
		for(Iterator<Map.Entry> it = mapEntry.iterator();it.hasNext();){
			Map.Entry item = it.next();
			Object key = item.getKey();
			String keyName = "{\"" + key.toString() + "\":";
			Object value = item.getValue();
			strBuff.append(keyName);
			strBuff.append(this.createObjToJson(value, JsonName));
			strBuff.append("},");
		}
		strBuff.deleteCharAt(strBuff.length() - 1);
		strBuff.append("]}");

		return strBuff.toString();
	}
	
	//创建一个数组对象的JSON字符串
	public String createArrayToJson(Object obj,String JsonName) {
		StringBuffer strBuff = new StringBuffer();
		// 如果传过来的数据长度为0则表示没有数据传过来,直接返回一个{"JsonName":[]}
		if (Array.getLength(obj) == 0)
			return "{\"" + JsonName + "\":[]}";
		// 否则开始构建字符串
		strBuff.append("{\"" + JsonName + "\":[");
		for(int i = 0; i < Array.getLength(obj); i++) {
			Object item = Array.get(obj, i);
			strBuff.append(this.createObjToJson(item, JsonName));
			strBuff.append(",");
		}
		strBuff.deleteCharAt(strBuff.length() - 1);
		strBuff.append("]}");

		return strBuff.toString();
	}
	
	
	//创建一个集合类对象的JSON字符串
	public String createByReflect(Collection<?> obj, String JsonName) {
		StringBuffer strBuff = new StringBuffer();
		// 如果传过来的数据长度为0则表示没有数据传过来,直接返回一个{"JsonName":[]}
		if (obj.size() == 0)
			return "{\"" + JsonName + "\":[]}";
		// 否则开始构建字符串
		strBuff.append("{\"" + JsonName + "\":[");
		for (Iterator<?> it = obj.iterator(); it.hasNext(); ) {
			Object item = it.next();
			strBuff.append(this.createObjToJson(item, JsonName));
			strBuff.append(",");
		}
		strBuff.deleteCharAt(strBuff.length() - 1);
		strBuff.append("]}");

		return strBuff.toString();
	}

	}
分享到:
评论

相关推荐

    json 补充最后一个Jar包commons-collections-3.2.jar

    JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,它以其简洁明了的文本形式,易于人阅读和编写,同时也易于机器解析和生成。在Java开发中,JSON常用于客户端与服务器之间的数据交互,例如API接口的...

    Mixly的JSON数据收发使用说明

    需要注意的是,在当前版本中并没有包含针对JSON数组处理的模块,未来版本可能会根据用户的需求对此进行补充。现有的模块已经足够支持大多数情况下对JSON数据的操作需求。 #### 六、总结 通过Mixly提供的JSON数据...

    net.sf.json需要的jar

    4. **json-lib-2.2.3-jdk15.jar**:这可能是JSON库的另一个版本,可能被用作net.sf.json库的补充或替代。JSON-lib是一个将JSON转换为各种Java类型以及反之的库,支持多种Java平台。 5. **ezmorph-1.0.6.jar**:...

    json包

    3. `commons-lang-2.5.jar`:Apache Commons Lang是一个提供了一系列实用的工具类的库,主要用于补充Java核心类库的功能。在处理JSON时,可能用到了Lang库提供的字符串操作、异常处理等功能。 4. `commons-...

    JSONiq: XQuery for JSON

    JSONiq是一种专门针对JSON数据格式的查询语言,其设计理念基于XML的XQuery查询语言。...随着互联网数据交换格式的不断演变,JSONiq作为一种技术补充,为开发者提供了在XQuery环境中处理JSON数据的能力。

    JAVA转换JSON jar

    3. **commons-lang-2.3.jar**:Apache Commons Lang是Java标准类库的补充,包含了一些实用的工具类,可能在数据转换过程中提供辅助功能。 4. **commons-beanutils-1.7.0.jar**:Apache Commons BeanUtils简化了...

    json转换工具jackson

    本文将深入探讨Jackson作为JSON转换工具的关键知识点,并基于提供的博文链接进行补充。 1. **Jackson库介绍** Jackson是一个开源项目,其核心库为`com.fasterxml.jackson.core`,包括`jackson-databind`、`jackson...

    json处理jar包

    2. `commons-lang-2.5.jar`:Apache Commons Lang是一个实用工具类库,包含对Java语言功能的补充,如字符串操作、数组处理等。在解析或生成JSON字符串时,可能会用到这些工具。 3. `commons-beanutils-1.8.0.jar`:...

    json.zip文件

    - **commons-lang-2.3.jar**: Apache Commons Lang提供了一系列实用的工具方法,补充了Java语言功能,如字符串操作、日期时间处理等,对于处理JSON字符串很有帮助。 - **commons-beanutils-1.7.0.jar**: Apache ...

    JAVA操作JSON全套包,无需另外下载一次搞定

    3. **commons-lang-2.4.jar**:Apache Commons Lang是Apache软件基金会提供的一个Java工具包,包含一系列实用的工具类,用于补充Java语言功能。在处理JSON时,可能会用到字符串处理、日期时间操作等,这些功能在这个...

    json-lib所用的jar包

    2. `commons-lang-2.5.jar`:Apache Commons Lang,是一个实用工具类库,补充了Java语言的基本功能,如字符串操作、日期时间处理等,对于`json-lib`在处理JSON字符串时可能需要用到这些功能。 3. `commons-...

    notepad++ 32位 JSON格式化插件

    总的来说,NPPJSONViewer是Notepad++的一个强大补充,特别是对于那些在工作中频繁接触JSON数据的开发者来说,它简化了JSON的查看和编辑过程,让代码管理和调试变得更加便捷。通过简单的安装步骤,用户就能享受到这款...

    json 需要的各个jar包 齐全

    JSON-B(Java Binding for JSON)是JSON-P的补充,提供了自动绑定机制,类似于JAXB对于XML的处理。`jakarta.json.bind-api-*.jar`和`jakarta.json-api-*.jar`分别是其API和实现。 6. **Apache Commons JSON** ...

    全国各城市经纬度json数据

    全国各城市的经纬度的json数据,欢迎大家下载调用,有补充的请私信我

    JSON-js-master.rar

    2. 可能的第二个脚本(未明确指出文件名):这个脚本可能是对json2.js的补充或者优化,针对特定问题或提供了额外的功能,比如性能优化、错误处理、自定义转换函数等。具体功能需要查看实际的文件内容才能得知。 ...

    asp_json.rar_Json asp_json a_json asp -asp.n_json.asp

    在压缩包的子文件名中,“asp的另一个json类,数组形式,给jquery用的.txt”表明还提供了另一个ASP JSON类的文档或说明,可能是对原类库的补充,或者是另一种实现方式,同样适用于处理JSON数组,供jQuery使用。...

    package.json详细模板+注释

    package.json的模板,里面包含了笔者已经验证过的内容,已经给出相关注释,后续会不读那补充,也希望有精通的朋友们帮忙提供建议

    beetl-json

    【beetl-json】是一个专为Java开发人员设计的库...总之,beetl-json是Beetl框架的一个强大补充,使得在Java应用中处理JSON数据变得更加简单和高效。通过深入了解和实践,你可以充分利用其特性,提升你的后端开发效率。

    jquery.jsoncookie.zip

    总之,`jquery.jsoncookie`是jQuery库的一个强大补充,它使得在Cookie中处理JSON数据变得简单。通过使用这个插件,开发者可以更方便地在客户端存储和恢复结构化的应用程序状态,提高Web应用的用户体验。

    echarts江苏省地图json.zip

    同时,如果`G2`确实指的是数据可视化库,那么它可能被用作ECharts的补充,或者在不同的场景下替代ECharts,例如在移动设备或特定的图表需求中。 总的来说,这个压缩包为在Web应用中展示江苏省地图提供了必要的数据...

Global site tag (gtag.js) - Google Analytics