`
lizhenbin2010
  • 浏览: 101284 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

将简单的POJO转化为JSON或者XML

    博客分类:
  • J2se
 
阅读更多

利用反射机制获取类的信息,然后将所得的信息,转化成JSON数据,方便传输或者生产xml文件

下面是我的实现方法,办法有点笨,欢迎指正,就是生产xml文件的是很,不知道怎么样修改配置信息,比如

<property name=" " /> 我这里生成的都是mxlls之类的信息,不知道怎么需要改,先放着再说,遇到解决的是很在回来修改。

package com.lzb.common;

import java.io.File;
import java.io.FileOutputStream;
import java.lang.reflect.Field;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
/**
 * 
 * 功能描述:Java POJO转换成JSON字符串,或者XML
 *
 * @author  lizhenbin
 *
 * <p>修改历史:(修改人,修改时间,修改原因/内容)</p>
 */
public class EntityChanageXmlJson {
	
	private static final String SPLIT_STR = ":";
	private static final String KV_STR = ",";
	private static final String JSON_LEFT = "{";
	private static final String JSON_RIGHT = "}";
	private static final String SPLIT = "\"";
	private static final String PROP_SPLIT = ";";
	private static final String XML_FIELD = "field";
	private static final String XML_PROPERTY = "property";
	private static final String XML_VALUE = "value";
	
	private static EntityChanageXmlJson instance = null;
	public EntityChanageXmlJson() {};
	public static synchronized EntityChanageXmlJson getInstance() {
		if(instance==null)
			instance = new EntityChanageXmlJson();
		return instance;
	} 
	
	/**
	 * 
	 * 功能描述:将POJO的转化成json字符串形式, POJO的属性只可以是public的简单属性
	 *
	 * @author  lizhenbin
	 * <p>创建日期 :May 7, 2012 12:38:31 PM</p>
	 *
	 * @param obj 转成为json的POJO对象
	 * @return
	 *
	 * <p>修改历史 :(修改人,修改时间,修改原因/内容)</p>
	 */
	public static String pojoToJson(Object obj) {
		
		if(obj==null) {
			return null;
		}
		Map<Map<String,Object>,String> clazzmap = new HashMap<Map<String, Object>, String>();
		/**
		 * Java的反射机制获取类的信息
		 */
		Class clazz = obj.getClass();
		Field[] fields = clazz.getFields();
		/**
		 * 将Class的值放到map
		 */
		for(Field f : fields) {
			String key = f.getName();
			String type = f.getType().getSimpleName();
			Object value = null;
			try {
				value = f.get(obj);
			} catch (IllegalArgumentException e) {
				e.printStackTrace();
			} catch (IllegalAccessException e) {
				e.printStackTrace();
			}
			Map<String, Object> kvmap = new HashMap<String, Object>();
			kvmap.put(key, value);
			clazzmap.put(kvmap, type);
		}
		/**
		 * 构建json格式
		 */
		if(clazzmap!=null) {
			String json = null;
			StringBuilder sb = new StringBuilder();
			sb.append(JSON_LEFT);
			Set<Map<String, Object>> keySet = clazzmap.keySet();
			for(Map<String, Object> skey : keySet) {
				Set<String> kvSet = skey.keySet();
				for(String s : kvSet) {
					sb.append(SPLIT + s + SPLIT);
					sb.append(KV_STR);
					sb.append(SPLIT + skey.get(s) + SPLIT + SPLIT_STR);
					// 根据需求可以返回类型
					// sb.append(SPLIT + clazzmap.get(skey) + SPLIT + PROP_SPLIT);
				}
			}
			sb.deleteCharAt(sb.toString().length()-1);
			sb.append(JSON_RIGHT);
			return sb.toString();
		}
		return null;
	}
	
	/**
	 * 
	 * 功能描述: 将简单的POJO转为xml形式
	 *
	 * @author  lizhenbin
	 * <p>创建日期 :May 8, 2012 6:30:16 PM</p>
	 *
	 * @param obj 转成为xml的POJO对象
	 * @param path 生成xml存放的位置
	 *
	 * <p>修改历史 :(修改人,修改时间,修改原因/内容)</p>
	 */
	public static boolean pojoToXml(Object obj, String path) {
		
		Map<Map<String,Object>,String> clazzmap = new HashMap<Map<String, Object>, String>();
		Class clazz = obj.getClass();
		Field[] fields = clazz.getFields();
		Object value = null;
		for(Field f : fields) {
			String key = f.getName();
			try {
				value = f.get(obj);
			} catch (IllegalArgumentException e) {
				e.printStackTrace();
			} catch (IllegalAccessException e) {
				e.printStackTrace();
			}
			Map<String, Object> kvmap = new HashMap<String, Object>();
			kvmap.put(key, value);
			String type = f.getType().getName();
			clazzmap.put(kvmap, type);
		}
		
		/**
		 * 生成xml
		 */
		try {
			/**
			 * 初始化,使用dom生成xml,类的属性
			 */
			Document doc = null;
			DocumentBuilderFactory dbfactory = DocumentBuilderFactory.newInstance();
			DocumentBuilder docBuilder = dbfactory.newDocumentBuilder();;
			doc = docBuilder.newDocument();
			/**
			 * 创建XML的根节点(根),XML的根节点
			 */
			Element root = doc.createElementNS(clazz.getName(), clazz.getSimpleName()); 
			doc.appendChild(root);
			Element field = doc.createElementNS(XML_FIELD, XML_PROPERTY);
			root.appendChild(field);
			Set<Map<String,Object>> keySetMap = clazzmap.keySet();
			for(Map<String,Object> smap : keySetMap) {
				Set<String> keySet = smap.keySet();
				for(String s : keySet) {
					Element property = doc.createElementNS(s, XML_PROPERTY);
					field.appendChild(property);
					Element _child = doc.createElementNS(clazzmap.get(smap), XML_VALUE);
					_child.appendChild(doc.createTextNode(String.valueOf(smap.get(s))));
					property.appendChild(_child);
				}
			}
			
			/**
			 * 结束拼凑XML,输出xml
			 */
			TransformerFactory tff = TransformerFactory.newInstance();
			Transformer transformer = tff.newTransformer();
			File file = new File(path);
			FileOutputStream out = new FileOutputStream(file);
			StreamResult xmlResult = new StreamResult(out);
			transformer.setOutputProperty(OutputKeys.INDENT, "yes");
			transformer.transform(new DOMSource(doc), xmlResult);
			return true;
			
		} catch (Exception e) {
			e.printStackTrace();
			return false;
		}
	}

}

 

分享到:
评论

相关推荐

    毕设论文--于基json的异构数据库整合研究.doc

    将 JSON 转化为 POJO 也是异构数据库整合中的一种重要技术。 第4章 异构数据库与 JSON 的映射研究 4.1 JSON 与异构数据库整合系统设计 异构数据库整合系统的设计需要考虑到数据模式的不一致性和数据格式的差异性...

    支持thrift协议的纯java版的增强工具集合, pojo直接转换为thrift,json/xml转换为thrift

    thrift-enhancer是一组支持thrift协议的加强包,设计...thrift-translator: 提供动态解析idl并生成参数对象的能力,动态生成的参数对象可以自动转换为thrift协议数据,同时提供 thrift与json、xml的双向转换, 动态解析

    JSON jar包

    它能够将Java集合、JDBC结果集、JavaBean、POJO等对象转换为JSON格式,同时也可以将JSON文本转换回Java对象。json-lib支持多种流行的数据模型,如Apache Commons BeanUtils、Google Guava、Hibernate等。 在Java...

    json-lib-2.1

    例如,你可以将一个HashMap、ArrayList或者自定义的Java类实例转化为JSON格式的字符串,以便发送到服务器或展示给用户。 2. **反序列化(Deserialization)**:将JSON字符串转换回Java对象。这有助于从服务器接收到...

    学士学位论文--基于json的异构数据库整合研究.doc

    在研究中,我们对 JSON 和 POJO 之间的映射进行了深入研究,讨论了 JSON 的解码、JSON 与 XML 的比较、JSON 与 POJO 的相互转化等问题,并对将 JSON 融入 ORM 的技术进行了探讨。 此外,我们还对异构数据库与 JSON ...

    json-lib-v2.4

    例如,`XMLUtils.toJSON()`可以将XML字符串转化为JSON格式,而`JSONObject.toXML()`则可以将JSON对象转换为XML字符串。 4. **复杂类型的处理**:除了基本类型和简单对象,`json-lib`还可以处理包括日期、数组、集合...

    jsonschema2pojo-bacta-archive:用于 json 模式代码生成的自定义规则工厂

    JSONSchema2Pojo则将这种规范转化为可直接使用的Java类,使得开发者无需手动编写这些模型类,大大提高了开发效率。 这个名为“jsonschema2pojo-bacta-archive”的扩展,可能包含以下特性: 1. **自定义规则**:...

    实体类反射非空赋值,AjaxJson工具类

    序列化是将Java对象转化为JSON字符串,而反序列化则是将JSON字符串转化为Java对象。以Jackson为例,`ObjectMapper`类提供了`readValue()`和`writeValueAsString()`方法来实现这两个过程。前者接收一个JSON字符串和...

    基于json的异构数据库整合研究--大学毕业论文.doc

    JSON的解析是整合过程的关键步骤,包括将JSON字符串转化为Java对象(POJO,Plain Old Java Object)以及将Java对象转化为JSON字符串。 3.2 JSON与XML的比较 XML作为早期的数据交换格式,虽然功能强大但相对复杂,而...

    jackson-core-asl-1.9.13+jackson-mapper-asl-1.9.13札包

    通过配置Spring的`MappingJackson2HttpMessageConverter`,可以自动将Controller方法的返回值转化为JSON格式,并发送到客户端。 除了基本的功能外,Jackson库还有许多高级特性,如类型转换、类型安全的泛型处理、...

    springmvc-jackson-jar包集合

    反之,当需要返回JSON响应时,也会利用`ObjectMapper`将Java对象转化为JSON。 四、优化JSON处理 为了提高性能和灵活性,开发者还可以通过以下方式优化Spring MVC与Jackson的配合: 1. 配置`ObjectMapper`:通过`...

    数据转换为pojo类

    "数据转换为POJO类"这一主题涉及到如何将接收到的数据结构(如JSON或XML)转化为Java对象,以便更方便地在应用中使用。POJO(Plain Old Java Object)是一种简单的Java类,通常用于封装数据,它没有特殊的行为,只是...

    swato教程

    也可以是XML格式,客户端通过SWATO客户端引擎将XML转化为JSON。这样,开发者在客户端只需关注JavaScript对象(这些对象结构与Java对象或XML结构相对应)。 #### 四、SWATO的视图组件 SWATO提供了一些内置的视图...

    Axis2手把手学习资料

    在Axis2中,你可以轻松地将一个简单的POJO转换为Web服务,无需繁琐的配置步骤。POJO中的所有公共方法将被自动暴露为Web服务接口。 例如,我们可以创建一个名为`SimpleService`的POJO类,包含两个公共方法`...

    ajax自动补全模糊查询

    前端收到服务器返回的数据后,会解析这些数据,通常转化为JSON格式,然后动态地将结果显示在输入框下方,形成下拉列表。这通常涉及到DOM操作,比如使用jQuery或者其他库来添加或更新HTML元素。 在代码实现中,DB类...

    Axis2完美教程java c#调用

    只需将一个普通的Java类(POJO)暴露为公共方法,Axis2就能自动将其转化为Web服务。 #### 示例:SimpleService ```java public class SimpleService { public String getGreeting(String name) { return "你好 ...

    sourcecode

    例如,使用Groovy的Grails框架,开发者可以创建DSL来定义控制器和视图,系统会自动将其转化为Java代码。 5. **Maven插件**:许多Maven插件,如MyBatis Generator,可以从XML配置文件生成Java代码,包括DAO层、模型...

    SpringMVC基础篇笔记.docx基础篇笔记.docx

    - **通过POJO对象**:直接返回一个POJO对象作为模型数据,SpringMVC会自动将其转化为模型数据。 #### 五、视图和视图解析器 - **视图**:负责展示数据,常见的视图技术有JSP、Freemarker等。 - **视图解析器**:...

    Spring MVC面试题(2022最新版)

    **@ResponseBody注解的作用**:用于将控制器的方法返回对象转化为响应体返回给前端。 **@PathVariable和@RequestParam的区别**: - `@PathVariable`用于获取URL路径中的变量值。 - `@RequestParam`用于获取URL查询...

    t淘淘商城项目 商城项目 视频和源码教程 详细

    单点登录系统:为多个系统之间提供用户登录凭证以及查询登录用户的信息。 2.3. 技术架构 2.3.1. 传统架构 思考:有什么问题? 1、 模块之间耦合度太高,其中一个升级其他都得升级 2、 开发困难,各个团队...

Global site tag (gtag.js) - Google Analytics