文档章节

Gson转复杂数据为对象

少侠-你的剑掉了
 少侠-你的剑掉了
发布于 2016/04/01 09:29
字数 770
阅读 145
收藏 0

业务需求并不复杂,接口返回来的数据如下,把数据写成文件作为测试数据。

解析json真是家常便饭,所有读取文件的方式做测试还是很方便的

{
    "result": {
        "entityAdded": [
            {
                "userId": "ff808081519f09640151b43fcbad00dc",
                "userCode": "ycadmin",
                "userNiname": "ycadmin",
                "userName": "gggvv",
                "userPwd": "c8837b23ff8aaa8a2dde915473ce0991",
                "userIsactive": 1,
                "userSex": 0,
                "userPID": "",
                "userMobile": "",
                "userEmail": "ljh99@zte.com.cn",
                "enterpriseCode": null,
                "departCode": null,
                "userRole": 0,
                "userFrom": null,
                "userCompany": "",
                "userBirth": null,
                "userAddr": "",
                "userCreatetime": 1450428058000,
                "userIdport": "",
                "errorInfo": null,
                "pwErrorDate": null,
                "pwErrorNum": null,
                "departName": null,
                "userExtMap": null
            },
            {
                "userId": "ff808081535bb0860153a2caeac50065",
                "userCode": "rptadm",
                "userNiname": "rptadm",
                "userName": "rpt",
                "userPwd": "c8837b23ff8aaa8a2dde915473ce0991",
                "userIsactive": 1,
                "userSex": 0,
                "userPID": "",
                "userMobile": "",
                "userEmail": "123456@sina.com",
                "enterpriseCode": null,
                "departCode": null,
                "userRole": 0,
                "userFrom": null,
                "userCompany": "",
                "userBirth": null,
                "userAddr": "",
                "userCreatetime": 1458725120000,
                "userIdport": "",
                "errorInfo": null,
                "pwErrorDate": "2016-03-23",
                "pwErrorNum": "4",
                "departName": null,
                "userExtMap": null
            },
            {
                "userId": "ff808081535bb0860153a33bfe580087",
                "userCode": "lx123",
                "userNiname": "lx123",
                "userName": "lx123",
                "userPwd": "c8837b23ff8aaa8a2dde915473ce0991",
                "userIsactive": 1,
                "userSex": 0,
                "userPID": "",
                "userMobile": "",
                "userEmail": "1234567@sina.com",
                "enterpriseCode": null,
                "departCode": null,
                "userRole": 0,
                "userFrom": null,
                "userCompany": "",
                "userBirth": null,
                "userAddr": "",
                "userCreatetime": 1458732531000,
                "userIdport": "",
                "errorInfo": null,
                "pwErrorDate": null,
                "pwErrorNum": null,
                "departName": null,
                "userExtMap": null
            }
        ],
        "entityModifyed": [],
        "entityDeleted": [],
        "syncTime": "1458899530685"
    },
    "success": true,
    "errorMsg": null,
    "errorCode": null
}

只需要取里面几个数据就可以,一开始是用的注释部分的代码,感觉有点复杂,转成对象


创建实体 内部类

package com.zteict.iwop.ad.test;

import java.io.Serializable;
import java.util.List;

public class userinfo implements Serializable{
	private entity result;
	
	

public entity getResult() {
		return result;
	}
	public void setResult(entity result) {
		this.result = result;
	}
static class entity{
	private List<user> entityAdded;

	public List<user> getEntityAdded() {
		return entityAdded;
	}

	public void setEntityAdded(List<user> entityAdded) {
		this.entityAdded = entityAdded;
	}

	
	
}
	static class user{
	    private String userId;
	    private String userCode;
	    private String userNiname;
	    private String userName;
	    private String userPwd;
	    private String userEmail;
	    private Integer userRole;
	    private String authCode;
	    private String syncTime;
	    private String userIsactive;
	    private String userSex;
	    private String userPID;
	    private String userMobile;
	    private String enterpriseCode;
	    private String departCode;
	    private String userFrom;
	    private String userCompany;
	    private String userBirth;
	    private String userAddr;
	    private String userCreatetime;
	    private String userIdport;
	    private String errorInfo;
	    private String pwErrorDate;
	    private String pwErrorNum;
	    private String departName;
	    private String userExtMap;
  /*==================get set方法=========================================*/
	}
		

    
}

//读取json文件,解析数据   提取自己需要的数据


package com.zteict.iwop.ad.test;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import com.google.gson.reflect.TypeToken;
import com.zteict.iwop.ad.test.userinfo.user;


public class Test2 {
	public static void main(String[] args) {
		//读取测试数据文件
		String data = ReadFile("G:/test/userinfo.json");
		//将data转成jsonObject 
		JsonObject datalist = (JsonObject) new JsonParser().parse(data);
		Gson gson = new Gson(); 
		//转换成userinfo 集合
		userinfo u = gson.fromJson(datalist,userinfo.class);
		System.out.println(u);
		u.getResult();
		System.out.println(u.getResult().getEntityAdded().get(0));
		
		List<user> users = u.getResult().getEntityAdded();
		for(user user:users){
			System.out.println(user.getUserCode());
		}
		
		
		//获取result值
		//Map ma = new Map<String, Map<String, List<Map<String,Object>>>>();
//		JsonObject json = (JsonObject) new JsonParser().parse(datalist.get("result").toString());
//		Gson gson = new Gson();  
//		//获取result中的entityAdded的值  并转成 userinfo 对象集合
//		List<userinfo> list = gson.fromJson(json.get("entityAdded"), new TypeToken<List<userinfo>>(){}.getType());
//		System.out.println(list.size());
//		Map<String, Object> uMap = new HashMap<String, Object>();
//		for(userinfo u:list){
//			uMap.put(u.getUserCode(), u);
//		}
//		if(uMap.containsKey("rptadm")){
//			System.out.println(uMap.get("rptadm"));
//			userinfo u = (userinfo) uMap.get("rptadm");
//			System.out.println(u.getUserId());
//		}
	}
	//读取文件
	public static String ReadFile(String path) {  
        File file = new File(path);  
        BufferedReader reader = null;  
        String laststr = "";  
        try {  
            reader = new BufferedReader(new InputStreamReader(new FileInputStream(file), "UTF-8"));  
            String tempString = null;  
            while ((tempString = reader.readLine()) != null) {  
                laststr = laststr + new String(tempString.getBytes(),"UTF-8");  
                //new String(tempString.getBytes(),"GBK");
            }  
            reader.close();  
        } catch (IOException e) {  
            e.printStackTrace();  
        } finally {  
            if (reader != null) {  
                try {  
                    reader.close();  
                } catch (IOException e1) {  
                }  
            }  
        }  
        return laststr;  
    }  

}


由于项目文件是分布式的,实体中的内部类无法调用自身的类,有不得不采用下面的注释的方式去数据。

这个有个坑就是

  "userCompany": "",
   "userAddr": "",

这样的数据转成map之后    userCompany=  ,userAddr=  ,如果要遍历map会报错,需要转换下


参考文章  http://my.oschina.net/bddiudiu/blog/263071



© 著作权归作者所有

少侠-你的剑掉了
粉丝 3
博文 11
码字总数 4983
作品 0
深圳
程序员
私信 提问
json处理,json、object的相互转化

用 FastJson将Json转换Bean ,用Jackson或Gson将Bean 转FastJson 要求能够支持获取Object中的Object,即支持深层嵌套的Object解析,此外json、Object间的相互转换要快速。 参考:各个JSON技术...

刘阳0292
2017/07/09
0
0
有效选择七个关于 Java 的 JSON 开源类库

有效选择七个关于Java的JSON开源类库 April 4, 2014 By Constantin Marian Alin 翻译:无若 (英语原文:http://www.developer.com/lang/jscript/top-7-open-source-json-binding-providers-......

溪边九节
2014/04/19
1.3W
14
有效选择七个关于Java的JSON开源类库

April 4, 2014 By Constantin Marian Alin 翻译:无若 (英语原文:http://www.developer.com/lang/jscript/top-7-open-source-json-binding-providers-available-today.html) 简介 JSON是J......

无若
2014/04/19
6.1K
1
拉风的道长/SJson

##Sjon的初衷是什么? 有没有遇到服务器接口返回数据总是不固定的情况? //这是接口的定义:ArrayList students;int counts; //这是他喵的服务器返回:{"students" :[], "counts":0} //这也是...

拉风的道长
2015/09/01
0
0
Gson 解析 Json,举几个常用的实例!

一. 序 前几天写了一篇,关于利用 GSON 在 JSON 序列化和反序列化之间,数据容错的文章。最简单的利用 注解来配置多个不同 JSON Key 值,或者再使用 来配置一些例外的情况。更复杂一些的数据...

承香墨影
2019/06/25
0
0

没有更多内容

加载失败,请刷新页面

加载更多

每天AC系列(六):有效的括号

1 题目 LeetCode第20题,这题比较简单,匹配括号. 2 栈 这是栈的典型应用,括号匹配,当然不需要直接使用栈,使用一个StringBuilder即可: if(s.isEmpty()) return true;char a = s.charAt(0);...

Blueeeeeee
今天
27
0
Spring AOP-06-切入点类型

切入点是匹配连接点的拦截规则。之前使用的是注解@Pointcut,该注解是AspectJ中的。除了这个注解之外,Spring也提供了其他一些切入点类型: • 静态方法切入点StaticMethodMatcherPointcut •...

moon888
昨天
90
0
Class Loaders in Java

1. Introduction to Class Loaders Class loaders are responsible for loading Java classes during runtime dynamically to the JVM (Java Virtual Machine). Also, they are part of the ......

Ciet
昨天
96
0
以Lazada为例,看电商系统架构演进

什么是Lazada? Lazada 2012年成立于新加坡,是东南亚第一电商,2016年阿里投资10亿美金,2017年完成对lazada的收购。 业务模式上Lazada更偏重自营,类似于亚马逊,自建仓储和为商家提供服务...

春哥大魔王的博客
昨天
62
0
【自用】 Flutter Timer 简单用法

dart: void _startTime() async { _timer = Timer(Duration(seconds: sec), () { fun(xxx,yyy,zzz); }); } @override void dispose() { _timer.cancel()......

Tensor丨思悟
昨天
65
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部