主要代码
public static void isFor(String str,String keyObj) {
StringBuffer sb = new StringBuffer();
HashMap map = JSON.parseObject(str, HashMap.class);
for (Object key : map.keySet()) {
boolean jsonValid = isJSONValid(map.get(key) + "");
if (jsonValid) {
Object json = JSONObject.parse(map.get(key) + "");
if (json instanceof JSONObject) {
JSONObject jsonObject = (JSONObject) json;
//每次递归传入上一层的key
isFor(map.get(key) + "",keyObj+"."+key);
} else if (json instanceof JSONArray) {
JSONArray jsonArray = (JSONArray) json;
//数组格式json串转换带下标的数组格式,从0开始
int i = 0;
for (Object obj : jsonArray) {
isFor(obj.toString(),(String)key+"["+i+"]");
i++;
}
}
} else {
System.err.println(keyObj+"."+key + "== " + map.get(key) + "");
}
}
}
public static boolean isJSONValid(String test) {
if(StringUtils.isBlank(test)) {
return false;
}
try {
JSONObject.parseObject(test);
} catch (Exception ex) {
try {
JSONObject.parseArray(test);
} catch (Exception ex1) {
return false;
}
}
return true;
}
测试
json格式:
public static void main(String[] args) throws Exception {
String str = "{\"xlbzph\": \"H040056\",\"jyxl\": {\"zdz\": \"城南汽车站\",\"qwe\": {\"www\": \"22222222222222\"}}}";
//String str = "{\"cyzglb\":[{\"cclzrqn\":\"2019\",\"cclzrqr\":\"26\",\"yxqsrqr\":\"26\",\"cyzglb\":\"经营性道路旅客运输驾驶员\",\"yxqsrqn\":\"2019\",\"yxqsrqy\":\"06\",\"yxqx\":\"6年\",\"cclzrqy\":\"06\"},{\"cclzrqn\":\"2019\",\"cclzrqr\":\"26\",\"yxqsrqr\":\"26\",\"cyzglb\":\"经营性道路旅客运输驾驶员\",\"yxqsrqn\":\"2019\",\"yxqsrqy\":\"06\",\"yxqx\":\"6年\",\"cclzrqy\":\"06\"},{\"cclzrqn\":\"2019\",\"cclzrqr\":\"26\",\"yxqsrqr\":\"26\",\"cyzglb\":\"经营性道路旅客运输驾驶员\",\"yxqsrqn\":\"2019\",\"yxqsrqy\":\"06\",\"yxqx\":\"6年\",\"cclzrqy\":\"06\"},{\"cclzrqn\":\"2019\",\"cclzrqr\":\"19\",\"yxqsrqr\":\"20\",\"cyzglb\":\"经营性道路旅客运输驾驶员\",\"yxqsrqn\":\"2019\",\"yxqsrqy\":\"03\",\"yxqx\":\"6年\",\"cclzrqy\":\"03\"}],\"jcxx\":{\"zz\":\"四川成都\",\"csrq\":\"1977-02-11\",\"gj\":\"中国\",\"xm\":\"jinxiong yu\",\"bh\":\"sada123\",\"xb\":\"女\",\"ewm\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAIAAAD/gAIDAAAC8ElEQVR42u2aQXKDQBAD+f+nyTWHgEdqjYPL4uRyAQtNza6k2ePsMT6OIiiswiqsD4Z1jI8/7vXr/6vzJ//fn3l1/ov3vL3z8B0LC8NSB578noCeILsahfxz/46FlYY1f8T7Arl/XLXE1Gsnow/fsbDeCGs+Ad+f45XhfGpXp4jCOh5RhnzKn4PzPmRhPQmWJx0mS4F6pioLJkvQI3TW18EipfEpv//BG341LJRgiFZmfi2xyg/Ns74OVlYozq8lh2pr5gVbWDlYanhCZCq/v/oxPDlSWDuwPGExX5JJyXsRoyq2CysBi4SwnrnxwkV1MVHPLKwdWN4w6tLOX2BPlJg6q7BeTPBq0DEH4TVH1RJLLVCFlYY1D9jUZZ609b22CA8UCysBi0/YqqElksUTDW9KHQoLhXypNpQqCIhAtZsahYVh8RLj2z1S7SzPeBfWJqyNBX5+jjfxZ4V0YaVhpQSBt/Dz5pgXCsWS0sI61S1Hc8tCjLFakmTLXCDPKizZ7qhLPg9JeCPOK+pArFxYwgRPbKcqCIl0VJtgdruksAAs0rZUBScRClwqG+MW1hos1bh4cY06Fgm1JbiFFYKVNUAk9iNLvhEfn8F98IUl21SCKRUK8khHMuqFBWBlZWeqraCOQsxzYe3DIsOozVQubkn0GM7gC0uY4MnET7YNcWFJAsLCSsPiW4Xmj+XJCFVMELtWWGlYWcPhGW9VsszDGWPiL6xQR9poFkktL7Xh6pkbtUgLawcWkQ7q43KrROSFIWULC8Aim3VIq4pv8eCiF/UNCwsZaa9pNm/ocwQ8SoylDoVlWgoywZM4iMRHXru/sBKwPFuQssTk/upHMiAWFoDF432vENTWmRfRhKVDYa03WYmg5QVLFiXJ6hdWCBZvee0JBS9+8TYzFdYnwEpt6Nho4qMJvrBWYJGX8Vpbk09C4qbC2oTFS4A0+rmNVwXtus4qLDP6SIkJ1eJ6gfLctBdWAlaPQCusR2EVVmE94fgBHxlYVjHdvqMAAAAASUVORK5CYII\\u003d\",\"zh\":\"511027197702114401\"}}";
isFor(str,"");
}
输出结果
输出结果带了点,根据自己需要优化,这里懒得优化了
需要转换为map,加个入参map即可