将任意json转二维表 不限级

    xiaoxiao2021-09-23  94

    /**限制: * {}直接下级不能有{} * []直接下级不能有[] * []的直接下级类型一致,要么都是int,要么都是string,要么都是{} * * 操作方式: * 1、第一步:处理json对象,保证同一级中不存在多个集合,多余的集合放到第一个集合中的每一个子元素中 * 2、第二步:深度递归 * */ *

    package com.wanxiaobao.dop; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import java.util.*; /** * @Author: mihuajun 【kobe96688@126.com】 * @Date: 11/17/2016 5:51 PM */ public class Test { public static void main(String[] args) { String json = "{\"blank\":[\"xxx\",\"yy\"],\"id\":\"001\",\"account\":[{\"name\":\"name1\",\"phones\":[{\"phone\":\"000\"},{\"phone\":\"111\"}],\"account\":\"account1\",\"card\":[{\"cname\":\"cname1\",\"cid\":\"cid1\"},{\"cname\":\"cname2\",\"cid\":\"cid2\"}]},{\"name\":\"name2\",\"account\":\"account2\"}]}"; System.out.println(json); JSONObject jsonObject = JSON.parseObject(json); printItem(jsonObject); System.out.println(jsonObject); printX(jsonObject,new HashMap<String, Object>()); } private static List<String> printX(JSONObject jsonObject,Map<String,Object> reMap){ Set<String> keys = jsonObject.keySet(); List<String> currKeys = Arrays.asList(keys.toArray(new String[]{})); boolean flag = false; for(String key : keys){ Object value = jsonObject.get(key); if(value == null)continue; if(value instanceof JSONArray){ flag = true; }else{ reMap.put(key,value); } } for(String key : keys){ Object value = jsonObject.get(key); if(value instanceof JSONArray){ for(Object o1 : (JSONArray)value){ reMap.keySet().removeAll(printX((JSONObject) o1,reMap)); } } } if(!flag) System.out.println(reMap); return currKeys; } private static void printItem(JSONObject jsonObject){ Iterator<String> iterator = jsonObject.keySet().iterator(); String preArrayKey = null; while (iterator.hasNext()){ String key = iterator.next(); Object value = jsonObject.get(key); if(value == null)continue; if(value instanceof JSONArray){ JSONArray currArray = (JSONArray) value; if(currArray.size() == 0){ jsonObject.put(key,null); continue; } //集合下的子集非JSON对象转JSON对象 eg:[1,2,3] if(!(currArray.get(0) instanceof JSONArray) && !(currArray.get(0) instanceof JSONObject)){ JSONArray newArray = new JSONArray(); for(Object o1 : currArray){ JSONObject jsonObjectNew = new JSONObject(); jsonObjectNew.put(key,o1); newArray.add(jsonObjectNew); } jsonObject.put(key,newArray); } if(preArrayKey == null){ preArrayKey = key; }else{ for(Object o1 : currArray){ ((JSONObject)o1).put(preArrayKey,jsonObject.get(preArrayKey)); } jsonObject.put(preArrayKey,null); preArrayKey = key; } } } if (preArrayKey != null) for(Object o1 : (JSONArray)jsonObject.get(preArrayKey)){ printItem((JSONObject) o1); } } } 输出: Connected to the target VM, address: '127.0.0.1:9669', transport: 'socket' {"blank":["xxx","yy"],"id":"001","account":[{"name":"name1","phones":[{"phone":"000"},{"phone":"111"}],"account":"account1","card":[{"cname":"cname1","cid":"cid1"},{"cname":"cname2","cid":"cid2"}]},{"name":"name2","account":"account2"}]} {"id":"001","account":[{"name":"name1","account":"account1","card":[{"cname":"cname1","phones":[{"blank":[{"blank":"xxx"},{"blank":"yy"}],"phone":"000"},{"blank":[{"$ref":"$.account[0].card[0].phones[0].blank[0]"},{"$ref":"$.account[0].card[0].phones[0].blank[1]"}],"phone":"111"}],"cid":"cid1"},{"cname":"cname2","phones":[{"$ref":"$.account[0].card[0].phones[0]"},{"$ref":"$.account[0].card[0].phones[1]"}],"cid":"cid2"}]},{"blank":[{"$ref":"$.account[0].card[0].phones[0].blank[0]"},{"$ref":"$.account[0].card[0].phones[0].blank[1]"}],"name":"name2","account":"account2"}]} {blank=xxx, phone=000, name=name1, cname=cname1, id=001, account=account1, cid=cid1} {blank=yy, phone=000, name=name1, cname=cname1, id=001, account=account1, cid=cid1} {blank=xxx, phone=111, name=name1, cname=cname1, id=001, account=account1, cid=cid1} {blank=yy, phone=111, name=name1, cname=cname1, id=001, account=account1, cid=cid1} {blank=xxx, phone=000, name=name1, cname=cname2, id=001, account=account1, cid=cid2} {blank=yy, phone=000, name=name1, cname=cname2, id=001, account=account1, cid=cid2} {blank=xxx, phone=111, name=name1, cname=cname2, id=001, account=account1, cid=cid2} {blank=yy, phone=111, name=name1, cname=cname2, id=001, account=account1, cid=cid2} {blank=xxx, name=name2, id=001, account=account2} {blank=yy, name=name2, id=001, account=account2} Disconnected from the target VM, address: '127.0.0.1:9669', transport: 'socket' Process finished with exit code 0
    转载请注明原文地址: https://ju.6miu.com/read-677814.html

    最新回复(0)