将没有规则的Json转map,list组合的对象。
/** 东华软件 */
package com.dh.monitor.util;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Set;
import com.alibaba.fastjson.JSON;
/**
* @author lidehu
* @date 2018年11月30日
*/
public class ParseJson {
public static void main(String[] args) {
String jsonString = JSON.toJSONString(
new AAA("aString", 1,
new BBB("bString", 2, Arrays.asList(
new CCC("cString", 3),
new CCC("cString2", 3)))));
}
public static Object hierarchy(String json) {
if(json == null)
return json;
if (!json.startsWith("{") && !json.startsWith("["))
return json;
if (json.startsWith("{")) {
@SuppressWarnings("unchecked")
Map<String, Object> map = JSON.parseObject(json, Map.class);
Set<String> keySet = map.keySet();
for (String key : keySet)
map.put(key, hierarchy(map.get(key).toString()));
return map;
}
if (json.startsWith("[")) {
List<Object> list = JSON.parseArray(json, Object.class);
List<Object> list2 = new ArrayList<>();
for (Object object : list)
list2.add(hierarchy(object.toString()));
return list2;
}
return null;
}
}
class AAA {
String aString;
int a;
BBB bbb;
public AAA(String aString, int a, BBB bbb) {
this.aString = aString;
this.a = a;
this.bbb = bbb;
}
public String getaString() {
return aString;
}
public void setaString(String aString) {
this.aString = aString;
}
public int getA() {
return a;
}
public void setA(int a) {
this.a = a;
}
public BBB getBbb() {
return bbb;
}
public void setBbb(BBB bbb) {
this.bbb = bbb;
}
}
class BBB {
String bString;
int b;
List<CCC> cList;
public BBB(String bString, int b, List<CCC> cList) {
this.bString = bString;
this.b = b;
this.cList = cList;
}
public String getbString() {
return bString;
}
public void setbString(String bString) {
this.bString = bString;
}
public int getB() {
return b;
}
public void setB(int b) {
this.b = b;
}
public List<CCC> getcList() {
return cList;
}
public void setcList(List<CCC> cList) {
this.cList = cList;
}
}
class CCC {
String cString;
int c;
public CCC(String cString, int c) {
this.cString = cString;
this.c = c;
}
public String getcString() {
return cString;
}
public void setcString(String cString) {
this.cString = cString;
}
public int getC() {
return c;
}
public void setC(int c) {
this.c = c;
}
}
疑问:Map<String, Object> map = JSON.parseObject(json, Map.class); 这一行代码并没有定义map的实现类型。
跟进源码发现,没有指定实现类型会返回一个hashmap。
这篇博客探讨了如何将不规则的JSON数据转换为Map对象,特别是关注了当使用JSON.parseObject方法时,未指定Map实现类型的情况。通过源码分析,揭示了默认情况下该方法返回的是HashMap。
1750

被折叠的 条评论
为什么被折叠?



