当前位置 : 主页 > 编程语言 > java >

运用递归,将树形json数据处理成平铺型数据

来源:互联网 收集:自由互联 发布时间:2021-06-28
gistfile1.txt package com.gyf.platform.base;import java.util.HashMap;import java.util.Map;import com.alibaba.fastjson.JSON;import com.alibaba.fastjson.JSONObject;/***@author gyf*/public class Json2 {/** * 某面试题:JSON格式转换在某
gistfile1.txt
package com.gyf.platform.base;

import java.util.HashMap;
import java.util.Map;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
/**
*@author gyf
*/
public class Json2 {
	/**
	 * 某面试题:JSON格式转换
		在某个特定应用场景中,我们有一个从JSON获取的内容,比如:
		m = { "a": 1, "b": { "c": 2, "d": [3,4] } }
		现在需要把这个层级的结构做展开,只保留一层key/value结构。对于上述
		输入,需要得到的结构是:
		o = {"a": 1, "b.c": 2, "b.d": [3,4] }
		也就是说,原来需要通过 m["b"]["c"] 访问的值,在展开后可以通过 o["b.c"]
		访问。
		请实现这个“层级结构展开”的代码。
		输入:任意JSON(或者map/dict)
		输出:展开后的JSON(或者map/dict)
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Map
 
   map1 = new HashMap
  
   (); Map
   
     map2 = new HashMap
    
     (); Map
     
       map3 = new HashMap
      
       (); map2.put("c", 2); int [] a = {3,4}; map3.put("e", a); map2.put("d", map3); map1.put("a", 1); map1.put("b", map2); JSONObject json = new JSONObject(map1); System.out.println("输入:"+ json.toJSONString()); Map
       
         result = resolve(json.toJSONString(),""); System.out.println("输出:"+result.toString()); // 输出结果: 输入:{"a":1,"b":{"c":2,"d":{"e":[3,4]}}} // 输出:{a=1, b.d.e=[3,4], b.c=2} } public static Map
        
          resolve(String json,String parentkey){ Map
         
           map = (Map)JSON.parse(json); Map result = new HashMap<>(); for(String key : map.keySet()){ if((map.get(key)+"").indexOf("{") != -1){ Map
          
            result2 =resolve(map.get(key)+"",key);//递归调用 for(String key2 : result2.keySet()){ if(!parentkey.equals("")){//向上级传递结果集 result.put(parentkey+"."+key2, result2.get(key2)); }else{ result.put(key2, result2.get(key2)); } } }else{ if(!parentkey.equals("")){ result.put(parentkey+"."+key, map.get(key)); }else{ result.put(key, map.get(key)); } } } return result; } }
          
         
        
       
      
     
    
   
  
 
网友评论