Java解析json
程序员文章站
2024-03-24 15:22:22
...
使用fastJson为工具,封装了一个方法,免去了根据数据结构层层解析的痛楚,本人比较菜,可能使用场景有限:
数据预处理:
1. 如果json最外层为数组,需要如下处理;
/**最外层为数组的预处理
* @param data
*/
@Test
public void arrayPre(String data){
JSONArray array = JSON.parseArray(data);
Map<String,Object> res = new HashMap<>();
for(int i = 0; i < array.size(); i++){
parseJson(res,JSON.parseObject(array.get(i).toString()));
}
}
2.如果外层为json对象:/**最外层为json对象的预处理
* @param data
*/
@Test
public void jsonObj(String data){
JSONObject jsonObject = JSON.parseObject(data);
parseJson(new HashMap<String, Object>(),jsonObject);
}
下面是封装的解析方法(工具fastJson):
/**递归解析json: 传入json对象,和一个装结果的map,
* @param map json中所有的键值对,包括外层的
* @param jsonObject 适用所有jsonObject实现map的工具(把第二个参数换成Map<String,Object>即可),比如:fastJson
* @return
*/
public Map<String,Object> parseJson(Map<String,Object> map,JSONObject jsonObject){
for(Map.Entry<String,Object> entry : jsonObject.entrySet()){
map.put(entry.getKey(),entry.getValue());
if(entry.getValue().toString().contains("{")){
try {
JSONObject var1 = JSON.parseObject(entry.getValue().toString());
map = parseJson(map,var1);
}catch (ClassCastException e){
JSONArray array = JSON.parseArray(entry.getValue().toString());
for(int i = 0; i < array.size(); i++){
map = parseJson(map,JSON.parseObject(array.get(i).toString()));
}
}
}
}
return map;
}
下面是我解析的天气相关json的结果和源数据:
希望对你有所帮助! 一起踩坑,一起成长;
Java原生核心,不用带三方jar :
/**import net.sf.json.JSONArray;
* import net.sf.json.JSONException;
* import net.sf.json.JSONObject;
* import java.util.HashMap;
* import java.util.Iterator;
* import java.util.Map;
* @param res
* @param json
* @return
*/
private static Map<String,Object> parseJsonToMap(Map<String,Object> res, JSONObject json){
Iterator iterator = json.keys();
while (iterator.hasNext()){
String key = (String) iterator.next();
Object value = json.get(key);
res.put(key,value);
if(value.toString().contains("{")){
try {
JSONObject var = JSONObject.fromObject(value.toString());
res = parseJsonToMap(res, var);
}catch (JSONException e){
JSONArray array = JSONArray.fromObject(value);
for(int i = 0; i < array.size(); i++){
res = parseJsonToMap(res, (JSONObject) array.get(i));
}
}
}
}
return res;
}
推荐阅读
-
在Java中实现SFTP协议文件传输的两种解决方案
-
服务器使用Gzip压缩JSON数据报“socket write error: Connection reset by peer.”错误 博客分类: java web开发 GzipJSONConnection reset by peer
-
服务器使用Gzip压缩数据,加快网络传输 博客分类: java web开发 javaGzip压缩数据
-
java json数组解析
-
java中的四种引用:强弱软虚以及其用到的场景
-
gzip unzip java 压缩 解压缩 bytes 博客分类: java gzipunzip压缩解压缩bytes
-
Java解析json
-
java+ftp文件上传注意事项 博客分类: Java
-
Java工程师成长修炼手册:01--Java基础特性和字符串
-
Java提取视频中的指定桢数生成视频缩略图的解决方案