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

JSON 操作详细代码: 1.JSON 字符串转换为 Bean

/**
 * JSON字符串转换为对象
 * @param src JSON字符串
 * @param target 目标Bean
 */
public static <T> T String2Object(String src, Class<T> target) throws
    JsonParseException, JsonMappingException, IOException {

    ObjectMapper mapper = new ObjectMapper();
    //配置,允许使用单引号字符的JSON
    mapper.configure(JsonParser.Feature. ALLOW_SINGLE_QUOTES, true);
    return mapper.readValue( new StringReader(src), target);
}

2.Bean 对象转换为 JSON 字符串

/***
* 将对象序列化为JSONObject字符串
* @param object bean对象
* @return String JSONString
*/
public static String toJSONObjectString(Object object) {
    JSONObject jsonObject = JSONObject. fromObject(object);
    return jsonObject.toString();
}

3.JSON 字符串转换为 ArrayList

/**
* 字符串转化为目标List列表
* @param src 源JSON串
* @param target 目标类型
* @return 转化后的列表对象
*/
@SuppressWarnings("rawtypes")
public static List String2ObjectsList(String src, Class target)
        throws Exception {

    ObjectMapper mapper = new ObjectMapper();
    mapper.configure(JsonParser.Feature. ALLOW_SINGLE_QUOTES, true);
    List result = mapper.readValue( new StringReader(src),
                TypeFactory. collectionType(ArrayList.class, target));

    return result;
}

4.ArrayList 转换为 JSON 字符串

/**
* 将List对象序列化为JSON文本
* @param list
* @return List <T>
*/
public static <T> String toJSONString(List<T> list) {

    JSONArray jsonArray = JSONArray. fromObject(list);
    return jsonArray.toString();
}

其他的一些复杂的 Bean 转换,就不再多介绍了,主要都是围绕 JSONObject,JSONArray,ObjectMapper 这几个对象操作的,具体可以看看官方文档。

XML 操作详细代码: Simple 这个库通过对 Bean 对象提前通过添加注解的方式,从而简单易懂的方式来达到 Bean 与 XML 之间的转换

Bean Example:

import org.simpleframework.xml.Attribute;
import org.simpleframework.xml.Element;
import org.simpleframework.xml.Root;

@Root//根节点
public class User {

     @Attribute//作为属性
     private Integer id;

     @Element//作为元素
     private String name;

     @Element
     private String email;

     public User() {
            super();
     }

     public User(Integer id, String name, String email) {
            super();
            this. id = id;
            this. name = name;
            this. email = email;
     }

     /**
      * the below is getter and setter function
      */

     public Integer getId() {
            return id;
     }

     public void setId(Integer id) {
            this. id = id;
     }

     public String getName() {
            return name;
     }

     public void setName(String name) {
            this. name = name;
     }

     public String getEmail() {
            return email;
     }

     public void setEmail(String email) {
            this. email = email;
     }
}

1.XML 字符串转换为 Bean 对象

//定义序列化对象
Serializer serializer = new Persister();
User user = new User(1001,"test","wewoor@foxmail.com" );
String test = "<user id='1001'><name>test12</name><email>wewoor@foxmail.com</email></user>";
    //读取
serializer.read(user, test);
System. out.print(user.getId());

2.Bean 对象转换为 XML 字符串

User user = new User(1001,"test","wewoor@foxmail.com" );
//定义序列化对象
Serializer serializer = new Persister();
    //输出流
OutputStream out = new ByteArrayOutputStream();
serializer.write(user, out);
result = out.toString();
System. out.print(result);
out.close();

3.将 Bean 对象写入 XML 文件

file = new File("Ziv.xml");
User user = new User(1001,"test","wewoor@foxmail.com" );
    //定义序列化对象
Serializer serializer = new Persister();
    //将User user 写入ziv.xml
serializer.write(user, file);

4.读取 XML 文件转换为 Bean

file = new File( "Ziv.xml");
User user = new User();
    //定义序列化对象
Serializer serializer = new Persister();
    //读取ziv.xml到User中
serializer.read(user, file);

最后修改于 2014-03-17