标签: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.js 不能 fast todo 二层 index setw pen hand
原文地址:https://www.cnblogs.com/rainersha/p/10678268.html