java 递归法解析json_java解析任意层的json数据(递归解析)

/**

* JSONObject解析方法(可以解析任意层json,采用递归解析的方法)

* @param objJson

* @param menu 父菜单实体类

* @param list List

* @return

*/

@SuppressWarnings("rawtypes")

public static List

// 如果obj为json数组

if (objJson instanceof JSONArray) {

//将接收到的对象转换为JSONArray数组

JSONArray objArray = (JSONArray) objJson;

//对JSONArray数组进行循环遍历

for (int i = 0; i < objArray.size(); i++) {

//新建menu对象

Menu menu1 = new Menu();

//设置menu属性

menu1.setParentIds(((JSONObject)objArray.get(i)).get("parentIds").toString());

menu1.setSort(Integer.parseInt(((JSONObject)objArray.get(i)).get("sort").toString()));

menu1.setRemarks(((JSONObject)objArray.get(i)).get("remarks").toString());

menu1.setId(((JSONObject)objArray.get(i)).get("id").toString());

menu1.setPermission(((JSONObject)objArray.get(i)).get("key").toString());

menu1.setHref(((JSONObject)objArray.get(i)).get("parameter").toString());

menu1.setName(((JSONObject)objArray.get(i)).get("name").toString());

menu1.setIsShow(((JSONObject)objArray.get(i)).get("isShow").toString());

//如果menu的ID为空,则说明父级菜单为顶级菜单,则设其ID为1

if("".equals(menu.getId())|| menu.getId() == null){

menu.setId("1");

}

//设置menu对象的Parent的值为父级菜单对象

menu1.setParent(menu);

//将该级菜单对象存进list集合中

list.add(menu1);

//调用回调方法

analysisJson(objArray.get(i),menu1,list);

}

// 如果为json对象

}else if (objJson instanceof JSONObject) {

//将Object对象转换为JSONObject对象

JSONObject jsonObject = (JSONObject) objJson;

//迭代多有的Key值

Iterator it = jsonObject.keys();

//遍历每个Key值

while (it.hasNext()) {

//将key值转换为字符串

String key = it.next().toString();

//根据key获取对象

Object object = jsonObject.get(key);

// 如果得到的是数组

if (object instanceof JSONArray) {

//将Object对象转换为JSONObject对象

JSONArray objArray = (JSONArray) object;

//调用回调方法

analysisJson(objArray,menu,list);

}

// 如果key中是一个json对象

else if (object instanceof JSONObject) {

//调用回调方法

analysisJson((JSONObject) object,menu,list);

}

}

}

return list;

}

组装实体类:

/**

* 菜单Entity

* @author ThinkGem

* @version 2013-05-15

*/

public class Menu extends DataEntity

private static final long serialVersionUID = 1L;

private Menu parent; // 父级菜单

private String parentIds; // 所有父级编号

private String name; // 名称

private String href; // 链接

private String target; // 目标( mainFrame、_blank、_self、_parent、_top)

private String icon; // 图标

private Integer sort; // 排序

private String isShow; // 是否在菜单中显示(1:显示;0:不显示)

private String permission; // 权限标识

private String userId;

public Menu(){

super();

this.sort = 30;

this.isShow = "1";

}

public Menu(String id){

super(id);

}

@JsonBackReference

@NotNull

public Menu getParent() {

return parent;

}

public void setParent(Menu parent) {

this.parent = parent;

}

@Length(min=1, max=2000)

public String getParentIds() {

return parentIds;

}

public void setParentIds(String parentIds) {

this.parentIds = parentIds;

}

@Length(min=1, max=100)

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

@Length(min=0, max=2000)

public String getHref() {

return href;

}

public void setHref(String href) {

this.href = href;

}

@Length(min=0, max=20)

public String getTarget() {

return target;

}

public void setTarget(String target) {

this.target = target;

}

@Length(min=0, max=100)

public String getIcon() {

return icon;

}

public void setIcon(String icon) {

this.icon = icon;

}

@NotNull

public Integer getSort() {

return sort;

}

public void setSort(Integer sort) {

this.sort = sort;

}

@Length(min=1, max=1)

public String getIsShow() {

return isShow;

}

public void setIsShow(String isShow) {

this.isShow = isShow;

}

@Length(min=0, max=200)

public String getPermission() {

return permission;

}

public void setPermission(String permission) {

this.permission = permission;

}

public String getParentId() {

return parent != null && parent.getId() != null ? parent.getId() : "0";

}

@JsonIgnore

public static void sortList(List

for (int i=0; i

Menu e = sourcelist.get(i);

if (e.getParent()!=null && e.getParent().getId()!=null

&& e.getParent().getId().equals(parentId)){

list.add(e);

if (cascade){

// 判断是否还有子节点, 有则继续获取子节点

for (int j=0; j

Menu child = sourcelist.get(j);

if (child.getParent()!=null && child.getParent().getId()!=null

&& child.getParent().getId().equals(e.getId())){

sortList(list, sourcelist, e.getId(), true);

break;

}

}

}

}

}

}

@JsonIgnore

public static String getRootId(){

return "1";

}

public String getUserId() {

return userId;

}

public void setUserId(String userId) {

this.userId = userId;

}

@Override

public String toString() {

return name;

}

}

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值