码迷,mamicode.com
首页 > 编程语言 > 详细

复杂json格式转化为javabean

时间:2019-04-09 18:18:12      阅读:148      评论:0      收藏:0      [点我收藏+]

标签:json.js   不能   fast   todo   二层   index   setw   pen   hand   

工具阿里巴巴的fastjson包

<!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.47</version>
</dependency>

场景:json格式为两层,第一层为数组,第二层object+数组

例:

[
{
"id": "user_list",
"key": "id",
"tableName": "用户列表",
"className": "cn.dmego.domain.User",
"column": [
{
"key": "rowIndex",
"header": "序号",
"width": "50",
"allowSort": "false"
},
{
"key": "id",
"header": "id",
"hidden": "true"
},
{
"key": "name",
"header": "姓名",
"width": "100",
"allowSort": "true"
}
]
},
{
"id": "role_list",
"key": "id",
"tableName": "角色列表",
"className": "cn.dmego.domain.Role",
"column": [
{
"key": "rowIndex",
"header": "序号",
"width": "50",
"allowSort": "false"
},
{
"key": "id",
"header": "id",
"hidden": "true"
},
{
"key": "name",
"header": "名称",
"width": "100",
"allowSort": "true"
}
]
}
]


首先定义javabean,由内而外
内层javabean类
package bao;

public class Column {

	String key;
	String header;
	String width;
	boolean allowSort;
	boolean hidden;

	public String getKey() {
		return key;
	}

	public void setKey(String key) {
		this.key = key;
	}

	public String getHeader() {
		return header;
	}

	public void setHeader(String header) {
		this.header = header;
	}

	public String getWidth() {
		return width;
	}

	public void setWidth(String width) {
		this.width = width;
	}

	public boolean getAllowSort() {
		return allowSort;
	}

	public void setAllowSort(boolean allowSort) {
		this.allowSort = allowSort;
	}

	public boolean getHidden() {
		return hidden;
	}

	public void setHidden(boolean hidden) {
		this.hidden = hidden;
	}

	@Override
	public String toString() {
		return "Column [key=" + key + ", header=" + header + ", width=" + width + ", allowSort=" + allowSort
				+ ", hidden=" + hidden + "]";
	}

}

  

外层javabean类
package bao;

import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;

public class Query {

	String id;
	String key;
	String tableName;
	String className;
	List<LinkedHashMap<String, Object>> column;
	List<Column> columns = new ArrayList<Column>();

	public List<LinkedHashMap<String, Object>> getColumn() {
		return column;
	}

	public void setColumn(List<LinkedHashMap<String, Object>> column) {
		this.column = column;
	}

	public String getId() {
		return id;
	}

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

	public String getKey() {
		return key;
	}

	public void setKey(String key) {
		this.key = key;
	}

	public String getTableName() {
		return tableName;
	}

	public void setTableName(String tableName) {
		this.tableName = tableName;
	}

	public String getClassName() {
		return className;
	}

	public void setClassName(String className) {
		this.className = className;
	}

	public List<Column> getColumns() {
		return columns;
	}

	public void setColumns(List<Column> columns) {
		this.columns = columns;
	}

	@Override
	public String toString() {
		return "Query [id=" + id + ", key=" + key + ", tableName=" + tableName + ", className=" + className
				+ ", columns=" + columns + "]";
	}

}

  

验证类

package bao;

import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.util.List;
import java.util.Map;

import com.alibaba.fastjson.JSON;

public class Tdef {

	public static void main(String[] args) {
		String str = "[{\"id\":\"user_list\",\"key\":\"id\",\"tableName\":\"用户列表\",\"className\":\"cn.dmego.domain.User\",\"column\":[{\"key\":\"rowIndex\",\"header\":\"序号\",\"width\":\"50\",\"allowSort\":\"false\"},{\"key\":\"id\",\"header\":\"id\",\"hidden\":\"true\"},{\"key\":\"name\",\"header\":\"姓名\",\"width\":\"100\",\"allowSort\":\"true\"}]},{\"id\":\"role_list\",\"key\":\"id\",\"tableName\":\"角色列表\",\"className\":\"cn.dmego.domain.Role\",\"column\":[{\"key\":\"rowIndex\",\"header\":\"序号\",\"width\":\"50\",\"allowSort\":\"false\"},{\"key\":\"id\",\"header\":\"id\",\"hidden\":\"true\"},{\"key\":\"name\",\"header\":\"名称\",\"width\":\"100\",\"allowSort\":\"true\"}]}]";
		List<Query> queries = JSON.parseArray(str, Query.class);
		queries.stream().forEach(x->{
			x.getColumn().stream().forEach(y->{
				System.out.println(y);
				Column column = (Column) map2Object(y, Column.class); // json里是数组,然后数组里包含object+数组形式,转化之后2层数组里是object形式,需要反射来组装一哈
			    //Column column2 = JSON.parseObject(y.toString(), Column.class);  这个方法并不能转化2层嵌套结构,1层object+数组可以
				if (column != null)
					x.getColumns().add(column);
			});
			
			System.out.println("上为map里内容");
			System.out.println(x.toString());
			System.out.println();
		});
	}
	
	/**
	 * map内容转化为实体对象
	 * @param map
	 * @param clazz
	 * @return
	 */
	public static Object map2Object(Map<String, Object> map, Class<?> clazz){
		if (map == null)
			return null;
		Object obj = null;
		try {
			obj = clazz.newInstance();
			Field[] fields = obj.getClass().getDeclaredFields();
			for (Field field : fields) {
				int mod = field.getModifiers();
				if (Modifier.isStatic(mod) || Modifier.isFinal(mod)) {
					continue;
				}
				field.setAccessible(true);
				String result = (String) map.get(field.getName());
				if (result != null) {
					if (result.equals("false") || result.equals("true")) {
						field.set(obj, Boolean.parseBoolean(result));
					} else {
						field.set(obj, map.get(field.getName()));
					}
				}
			}
		} catch (Exception e) {
			// TODO: handle exception
		}
		return obj;
	}
}

 

运行结果:

{key=rowIndex, header=序号, width=50, allowSort=false}
{key=id, header=id, hidden=true}
{key=name, header=姓名, width=100, allowSort=true}
上为map里内容
Query [id=user_list, key=id, tableName=用户列表, className=cn.dmego.domain.User, columns=[Column [key=rowIndex, header=序号, width=50, allowSort=false, hidden=false], Column [key=id, header=id, width=null, allowSort=false, hidden=true], Column [key=name, header=姓名, width=100, allowSort=true, hidden=false]]]

 

{key=rowIndex, header=序号, width=50, allowSort=false}
{key=id, header=id, hidden=true}
{key=name, header=名称, width=100, allowSort=true}
上为map里内容
Query [id=role_list, key=id, tableName=角色列表, className=cn.dmego.domain.Role, columns=[Column [key=rowIndex, header=序号, width=50, allowSort=false, hidden=false], Column [key=id, header=id, width=null, allowSort=false, hidden=true], Column [key=name, header=名称, width=100, allowSort=true, hidden=false]]]

 

2019年4月9日 17:11:36

 

复杂json格式转化为javabean

标签:json.js   不能   fast   todo   二层   index   setw   pen   hand   

原文地址:https://www.cnblogs.com/rainersha/p/10678268.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!