zoukankan      html  css  js  c++  java
  • Java中将JSON格式的数据转换成对应的Bean、Map、List数据

    简单说明:

    为了方便数据在客户端及服务器端的传输,有时候我们会用一些比较方便组织的数据类型,比如json、xml等传给客户端,客户端也可以重新组织数据传回服务器端。JSON和XML提供了一套比较方便的数据组织形式。。并且有很多现成的类库用于解析这些数据。。

    本文是对net.sf.json使用后的总结。。目前官方开源的对json进行处理的项目很多,fastjson还有其它等等。。视自己处理问题的复杂程度考虑选择使用不同的依赖包。。

    如果使用maven构建项目,需要对以下两个包进行依赖

    <dependency>
    	<groupId>net.sf.json-lib</groupId>
    	<artifactId>json-lib</artifactId>
    	<version>2.2.3</version>
    </dependency>
    <dependency>
    	<groupId>xom</groupId>
    	<artifactId>xom</artifactId>
    	<version>1.2.5</version>
    </dependency>

    如果使用Eclipse自己构建项目,需要自己手动下载依赖包进行依赖。

    示例程序:

    1.将JSON组装的实体数据类型转换为Java中对应的简单Bean对象(只包含简单的数据类型)

    /**
     * 将json格式封装的简单实体类型数据转换成简单类型的javabean
     * @return
     */
    private static Object JSON2SimpleBean() {
    	String jsonStr = "{"age":23,"id":123,"name":"tt_2009"," +
    			""province":"上海","sex":"男"}";
    	JSONObject jsonBean = JSONObject.fromObject(jsonStr);
    	return JSONObject.toBean(jsonBean, SimpleUser.class);
    }

    以上代码是将Json数据串转换成java中自定义的对应的简单bean。SimpleUser看最后代码附录。

    2.将JSON组装的复杂数据转换成复杂的java数据实体(对象中包含其它复杂对象,如收货地址用List存储)

    /**
     * 将json格式封装的复杂实体数据转换成复杂类型的javabean
     * @return
     */
    private static Object JSON2ComplexBean() {
    	String jsonStr = "{"address":["北京","上海","广州"]," +
    			""age":23,"id":123,"name":"tt_2009","province":"上海","sex":"男"}";
    	JSONObject jsonBean = JSONObject.fromObject(jsonStr);
    	return JSONObject.toBean(jsonBean, ComplexUser.class);
    }

    以上代码将json组装的数据串转换成java中自定义的复杂数据实体。ComplexUser看最后附录代码。

    3.将Json数据转换成java中的List

    /**
     * 将json格式封装的列表数据转换成java的List数据
     * @return
     */
    private static Object JSON2List() {
    	String jsonArray =
    			"[{"age":23,"id":123,"name":"tt_2009_0","province":"上海","sex":"男"}," +
    			"{"age":24,"id":123,"name":"tt_2009_1","province":"上海","sex":"男"}," +
    			"{"age":32,"id":123,"name":"tt_2009_9","province":"上海","sex":"男"}]";
    
    	return JSONArray.toList(JSONArray.fromObject(jsonArray), new SimpleUser(), new JsonConfig());
    }

    以上代码将json组装的数据数据转换成java中的list数据。对更复杂的数据处理,后续文章介绍,比如处理日期等格式的数据。

    4.将json数据转换成java中的Map。(注意key只能是字符串)

    /**
     * 将json格式封装的字符串数据转换成java中的Map数据
     * @return
     */
    private static Map<String, SimpleUser> JSON2Map() {
    	Map<String, SimpleUser> map = new HashMap<String, SimpleUser>();
    	String jsonMapStr =
    			"{"tt_2009_4":{"age":27,"id":123,"name":"tt_2009_4","province":"上海","sex":"男"}," +
    			""tt_2009_6":{"age":29,"id":123,"name":"tt_2009_6","province":"上海","sex":"男"}," +
    			""tt_2009_0":{"age":23,"id":123,"name":"tt_2009_0","province":"上海","sex":"男"}}";
    	JSONObject jsonMap = JSONObject.fromObject(jsonMapStr);
    	Iterator<String> it = jsonMap.keys();
    	while(it.hasNext()) {
    		String key = (String) it.next();
    		SimpleUser u = (SimpleUser) JSONObject.toBean(
    				JSONObject.fromObject(jsonMap.get(key)),
    				SimpleUser.class);
    		map.put(key, u);
    	}
    	return map;
    }

    以上实现的是将json组装的key-value格式的数据转换成java中的map。

    附录代码:

    (setter、getter等方法省略掉了)

    /**
     * 只包含基本数据类型的简单实体类
     * @author TT_2009
     */
    public class SimpleUser {
    
    	private int id;
    
    	private String name;
    
    	private String sex;
    
    	private int age;
    
    	private String province;
    
    }
    /**
     * 包含复杂类型的实体类
     * @author TT_2009
     */
    public class ComplexUser extends SimpleUser {
    
    	private List<String> address;
    
    	public ComplexUser() {
    	}
    
    	public ComplexUser(int id, String name,
    			String sex, int age, String province,
    			List<String> address) {
    		super(id, name, sex, age, province);
    		this.address = address;
    	}
    
    	public List<String> getAddress() {
    		return address;
    	}
    
    	public void setAddress(List<String> address) {
    		this.address = address;
    	}
    
    }
  • 相关阅读:
    Codeforces 451A Game With Sticks
    POJ 3624 Charm Bracelet
    POJ 2127 Greatest Common Increasing Subsequence
    POJ 1458 Common Subsequence
    HDU 1087 Super Jumping! Jumping! Jumping!
    HDU 1698
    HDU 1754
    POJ 1724
    POJ 1201
    CSUOJ 1256
  • 原文地址:https://www.cnblogs.com/firstdream/p/6422424.html
Copyright © 2011-2022 走看看