解析json数据_java解析树状json数据(递归)

本文介绍如何处理调用第三方接口返回的树结构JSON数据,通过Java实现递归解析,详细解析方法。
摘要由CSDN通过智能技术生成

 点击上方蓝字关注我

94ef28a5c24cc20a81dd295a7a3d8006.gif

0b25621a4e8a9fee7b2539f23533f499.png

[  "obj1" : {    "attr" : "xxx",    "childs" : [      "obj2" : {        "attr" : "xxx",        "childs" : null      },       "obj3" : {        "attr" : "xxx",        "childs" : null      }    ]    },   "obj4" : {    "attr"  : "xxx"    "childs" : null  }]

当调用第三方接口, 返回树结构的json数据时, 可以用以下方式去解析

/** * JSONObject解析方法(可以解析任意层json,采用递归解析的方法) * 方法中的参数名称和个数, 根据实际需要自定义编辑, 比如可以自定义用逗号分隔的级联父id * @param objJson * @param menu 父菜单实体类 * @param list List
集合 * @return */@SuppressWarnings("rawtypes")public static List analysisJson(Object objJson, Menu menu, List 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("perm").toString()); menu1.setHref(((JSONObject)objArray.get(i)).get("href").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("0"); } //设置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;}

30e74ca29037ed968ff74a8b121380ae.png

1e08d9b21b0c3a88846c407b7c042376.gif

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
java解析json字符串。 commons-beanutils-1.9.0 commons-collections-3.2.1 commons-lang-2.6 commons-logging-1.1.3 ezmorph-1.0.6 json-lib-2.4-jdk15 demo: package com; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import net.sf.ezmorph.object.DateMorpher; import net.sf.json.JSONArray; import net.sf.json.JSONObject; import net.sf.json.JsonConfig; import net.sf.json.util.JSONUtils; public class Jsontest { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub JSONObject jsonObj = new JSONObject(); jsonObj.put("name", "hzj"); jsonObj.put("sex", "female"); System.out.println(jsonObj); } public static Object jsonToBean(String jsonString, Class cla) { JSONObject jsonObj = null; try { setDateFormat2Java(); jsonObj = JSONObject.fromObject(jsonString); } catch (Exception ex) { ex.printStackTrace(); } return JSONObject.toBean(jsonObj, cla); } public static Object jsonToBean(String jsonString, Class cla, Map map) { JSONObject jsonObj = null; try { setDateFormat2Java(); jsonObj = JSONObject.fromObject(jsonString); } catch (Exception ex) { ex.printStackTrace(); } return JSONObject.toBean(jsonObj, cla, map); } public static Object[] jsonToArray(String jsonString, Class cla) { Object[] arrObj = null; try { setDateFormat2Java(); JSONArray array = JSONArray.fromObject(jsonString); arrObj = new Object[array.size()]; for (int i = 0; i < array.size(); i++) { JSONObject jsonObject = array.getJSONObject(i); arrObj[i] = JSONObject.toBean(jsonObject, cla); } } catch (Exception ex) { ex.printStackTrace(); } return arrObj; } public static Object[] jsonToArray(String jsonString, Class cla, Map map) { Object[] arrObj = null; try { setDateFormat2Java(); JSONArray array = JSONArray.fromObject(jsonString); arrObj = new Object[array.size()]; for (int i = 0; i < array.size(); i++) { JSONObject jsonObject = array.getJSONObject(i); arrObj[i] = JSONObject.toBean(jsonObject, cla, map); } } catch (Exception ex) { ex.printStackTrace(); } return arrObj; } public static List jsonToList(String jsonString, Class cla) { List list = null; try { setDateFormat2Java(); JSONArray array = JSONArray.fromObject(jsonString); list = new ArrayList(); for (Iterator iter = array.iterator(); iter.hasNext();) { JSONObject jsonObject = (JSONObject) iter.next(); list.add(JSONObject.toBean(jsonObject, cla)); } } catch (Exception ex) { ex.printStackTrace(); } return list; } public static List jsonToList(String jsonString, Class cla, Map map) { List list = null; try { setDateFormat2Java(); JSONArray array = JSONArray.fromObject(jsonString); list = new ArrayList(); for (Iterator iter = array.iterator(); iter.hasNext();) { JSONObject jsonObject = (JSONObject) iter.next(); list.add(JSONObject.toBean(jsonObject, cla, map)); } } catch (Exception ex) { ex.printStackTrace(); } return list; } public static Map jsonToMap(String jsonString) { Map map = null; try { setDateFormat2Java(); JSONObject jsonObject = JSONObject.fromObject(jsonString); map = new HashMap(); for (Iterator iter = jsonObject.keys(); iter.hasNext();) { String key = (String) iter.next(); map.put(key, jsonObject.get(key)); } } catch (Exception ex) { ex.printStackTrace(); } return map; } public static Object[] jsonToArray(String jsonString) { JSONArray jsonArray = JSONArray.fromObject(jsonString); return jsonArray.toArray(); } public static void setDateFormat2Java() { JSONUtils.getMorpherRegistry().registerMorpher( new DateMorpher(new String[] { "yyyy-MM-dd", "yyyy-MM-dd HH:mm:ss" })); } }
下面是一个 Java 递归反序列化树形 JSON 数据的示例代码: ```java import java.io.IOException; import java.util.ArrayList; import java.util.List; import com.fasterxml.jackson.core.JsonParseException; import com.fasterxml.jackson.databind.JsonMappingException; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; public class JsonTreeDeserializer { private static ObjectMapper mapper = new ObjectMapper(); public static void main(String[] args) { String json = "{\"id\":1,\"name\":\"root\",\"children\":[{\"id\":2,\"name\":\"child1\",\"children\":[{\"id\":3,\"name\":\"grandchild1\"},{\"id\":4,\"name\":\"grandchild2\"}]},{\"id\":5,\"name\":\"child2\",\"children\":[{\"id\":6,\"name\":\"grandchild3\"},{\"id\":7,\"name\":\"grandchild4\"}]}]}"; try { JsonNode rootNode = mapper.readTree(json); Node tree = deserialize(rootNode); System.out.println(tree); } catch (JsonParseException e) { e.printStackTrace(); } catch (JsonMappingException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } public static Node deserialize(JsonNode node) { int id = node.get("id").asInt(); String name = node.get("name").asText(); Node tree = new Node(id, name); JsonNode childrenNode = node.get("children"); if (childrenNode != null && childrenNode.isArray()) { for (JsonNode childNode : childrenNode) { Node child = deserialize(childNode); tree.addChild(child); } } return tree; } } class Node { private int id; private String name; private List<Node> children; public Node(int id, String name) { this.id = id; this.name = name; this.children = new ArrayList<Node>(); } public void addChild(Node node) { this.children.add(node); } @Override public String toString() { return "Node [id=" + id + ", name=" + name + ", children=" + children + "]"; } } ``` 这个示例代码使用了 Jackson 库来进行 JSON 反序列化。首先读取 JSON 数据,然后递归地反序列化每个节点,并构建树形结构。最后输出树形结构。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值