最近工作过程中,遇到一个场景,后端使用Object类型来接收前端传来的json串。但是做处理时需要将object类型的数据转为List类型。多次转换不成功,网上内容乱糟糟,在一番自己的研究后,有一个亲测可用的方法来实现Object类型数据转list。
首先,将Object类型转为jsonObject类型,这里的paramJson是Object类型的
JSONObject json = (JSONObject) JSON.toJSON(paramJson);
然后通过翻看JSONObject类的源码我看到了这么一个方法
public Object get(Object key) {
Object val = this.map.get(key);
if (val == null && (key instanceof Number || key instanceof Character || key instanceof Boolean || key instanceof UUID)) {
val = this.map.get(key.toString());
}
return val;
}
通过KEY值将对象的value取出,以Object类型返回,这个方法让我看到了希望。接下来我便尝试通过getkey来取出的value,并对value使用强制转换的形式来转成list
List<Map> mapList = (List<Map>)json.get("updateList");
运行了一下,没问题,成功了。下面总结下关键的两行转换代码
Object paramJson;
//转换依靠下列两行即可
JSONObject json = (JSONObject) JSON.toJSON(paramJson);
List<Map> mapList = (List<Map>)json.get("updateList");
用个完整例子补充下:
get的内容是返回的键
public static void main(String[] args){
String url = "http://xxxxxxxx:xxxx/xxx/xx/xx/xxxxxx";
String zjhm = "12345998888";
String ksxm = "xxxx";
String param = "{'zjhm':'" + zjhm + "'}";
String result = getAPIResult(url, param);
JSONObject jsonObject = JSONObject.parseObject(result);
List<Map> mapList = (List<Map>)jsonObject.get("data");
String mapLists = (String) jsonObject.get("result");
String message = (String) jsonObject.get("message");
System.out.append(result);
System.out.println("----------------------" + mapList);
System.out.println(mapLists);
System.out.println(message);
}
这是string类型的result:
{"result":"1","message":"查询成功!","data":[{"zsbh":"xxxxxxxxxxxx","xm":"xxx","ksdm":"cnepm","ksmc":"考试成绩合格证明","pcmc":"2020年第一批","ksnd":"2020","kspc":"01"},{"zsbh":"xxxxxxxxxxx","xm":"xxx","ksdm":"cnepm","ksmc":"资格考试成绩合格证明","pcmc":"2022年第一批","ksnd":"2022","kspc":"01"}]}
这是List<Map> 类型的mapList:
[{"ksdm":"cnm","xm":"XXX","zsbh":"555555","kspc":"01","ksmc":"考试成绩合格证明","ksnd":"2020","cc":"2020年第一批"},{"ksdm":"cnepm","xm":"嘻嘻嘻","zsbh":"55555555","kspc":"01","ksmc":"资格考试成绩合格证明","ksnd":"2022","pcmc":"2022年第一批"}]
这是result和message:
1
查询成功!
通过上述一个请求外部接口并处理返回值的例子,可以看到更具体的用法。
工作之余,匆匆记录,表述有问题欢迎指正。