Java JSON、XML文件/字符串与Bean对象互转解析
前言
在做web或者其他项目中,JSON与XML格式的数据是大家经常会碰见的2种。在与各种平台做数据对接的时候,JSON与XML格式也是基本的数据传递格式,本文主要简单的介绍JSON/XML文件的读写操作,以及与Bean之间的转换。示例代码都是经过Demo测试的,当然也会把代码上传到GitHub.需要的朋友可以看看。
准备工作
我这里对XML与JSON主要依赖以下2个开源库,当然像针对xml和JSON解析的开源库非常的多,下面这2个感觉相对用起来比较简单。需要注意的是如果缺少下面jar文件中的一个,可能就会出现ClassNotFound 异常,如果发现使用的方法在当前库中找不到,则可能是库版本不同造成的,可以去官网查阅。
1.JSON解析库:
Jackson JSON Processor
官网:http://jackson.codehaus.org/
2.XML解析库 :
Simple XML serialization framework
官网:http://simple.sourceforge.net/home.php
lib截图:
JSON 操作详细代码:
1.JSON字符串转换为Bean
1 /** 2 * JSON字符串转换为对象 3 * @param src JSON字符串 4 * @param target 目标Bean 5 */ 6 public static <T> T String2Object(String src, Class<T> target) throws 7 JsonParseException, JsonMappingException, IOException { 8 9 ObjectMapper mapper = new ObjectMapper(); 10 //配置,允许使用单引号字符的JSON 11 mapper.configure(JsonParser.Feature. ALLOW_SINGLE_QUOTES, true); 12 return mapper.readValue( new StringReader(src), target); 13 }
2.Bean对象转换为JSON字符串
1 /*** 2 * 将对象序列化为JSONObject字符串 3 * @param object bean对象 4 * @return String JSONString 5 */ 6 public static String toJSONObjectString(Object object) { 7 JSONObject jsonObject = JSONObject. fromObject(object); 8 return jsonObject.toString(); 9 }
3.JSON字符串转换为ArrayList
1 /** 2 * 字符串转化为目标List列表 3 * @param src 源JSON串 4 * @param target 目标类型 5 * @return 转化后的列表对象 6 */ 7 @SuppressWarnings("rawtypes") 8 public static List String2ObjectsList(String src, Class target) 9 throws Exception { 10 11 ObjectMapper mapper = new ObjectMapper(); 12 mapper.configure(JsonParser.Feature. ALLOW_SINGLE_QUOTES, true); 13 List result = mapper.readValue( new StringReader(src), 14 TypeFactory. collectionType(ArrayList.class, target)); 15 16 return result; 17 }
4.ArrayList转换为JSON字符串
1 /** 2 * 将List对象序列化为JSON文本 3 * @param list 4 * @return List <T> 5 */ 6 public static <T> String toJSONString(List<T> list) { 7 8 JSONArray jsonArray = JSONArray. fromObject(list); 9 return jsonArray.toString(); 10 }
其他的一些复杂的Bean转换,就不再多介绍了,主要都是围绕JSONObject,JSONArray,ObjectMapper这几个对象操作的,具体可以看看官方文档。
XML 操作详细代码:
Simple 这个库通过对Bean对象提前通过添加注解的方式,从而简单易懂的方式来达到Bean与XML之间的转换
Bean Example:
1 import org.simpleframework.xml.Attribute; 2 import org.simpleframework.xml.Element; 3 import org.simpleframework.xml.Root; 4 5 @Root//根节点 6 public class User { 7 8 @Attribute//作为属性 9 private Integer id; 10 11 @Element//作为元素 12 private String name; 13 14 @Element 15 private String email; 16 17 public User() { 18 super(); 19 } 20 21 public User(Integer id, String name, String email) { 22 super(); 23 this. id = id; 24 this. name = name; 25 this. email = email; 26 } 27 28 /** 29 * the below is getter and setter function 30 */ 31 32 public Integer getId() { 33 return id; 34 } 35 36 public void setId(Integer id) { 37 this. id = id; 38 } 39 40 public String getName() { 41 return name; 42 } 43 44 public void setName(String name) { 45 this. name = name; 46 } 47 48 public String getEmail() { 49 return email; 50 } 51 52 public void setEmail(String email) { 53 this. email = email; 54 } 55 }
1.XML字符串转换为Bean对象
1 //定义序列化对象 2 Serializer serializer = new Persister(); 3 User user = new User(1001,"test","wewoor@foxmail.com" ); 4 String test = "<user id='1001'><name>test12</name><email>wewoor@foxmail.com</email></user>"; 5 //读取 6 serializer.read(user, test); 7 System. out.print(user.getId());
2.Bean对象转换为XML字符串
1 User user = new User(1001,"test","wewoor@foxmail.com" ); 2 //定义序列化对象 3 Serializer serializer = new Persister(); 4 //输出流 5 OutputStream out = new ByteArrayOutputStream(); 6 serializer.write(user, out); 7 result = out.toString(); 8 System. out.print(result); 9 out.close();
3.将Bean对象写入XML文件
1 file = new File("Ziv.xml"); 2 User user = new User(1001,"test","wewoor@foxmail.com" ); 3 //定义序列化对象 4 Serializer serializer = new Persister(); 5 //将User user 写入ziv.xml 6 serializer.write(user, file);
4.读取XML文件转换为Bean
1 file = new File( "Ziv.xml"); 2 User user = new User(); 3 //定义序列化对象 4 Serializer serializer = new Persister(); 5 //读取ziv.xml到User中 6 serializer.read(user, file);
作者:Ziv小威
出处:http://imziv.com/
关于作者:专注于Java技术的程序员一枚,此外对JS开发保持着较高的兴趣。爱好音乐,阅读,FM等等。
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接。
如有问题,可以邮件:wewoor@foxmail.com
微博:Ziv小威