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;
    	}
    
    }
  • 相关阅读:
    Android开发实例关键点讲解系列之一:Eclipse中建立Android工程
    类欧几里得小记
    【清华集训2017模拟12.09】塔
    【51nod1792】Jabby's segment tree
    【51nod1220】约数之和
    【51nod 2026】Gcd and Lcm
    【JZOJ5180】【NOI2017模拟6.29】呵呵
    2017noip总结
    2017.11.7总结
    Codeforces Round #395 Div.1 C pacifist【JZOJ5449】Pacifist
  • 原文地址:https://www.cnblogs.com/firstdream/p/6422424.html
Copyright © 2011-2022 走看看