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格式转换在某
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 Mapmap1 = 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; } }