fastjson 依赖包
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.73</version>
</dependency>
代码
/**
* @Auther xiaojin
* @Date 2020-09-16 11:46 上午
*/
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import java.io.*;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class JsonUtil {
//读取json文件
private static String readJsonFile(String fileName) {
String jsonStr = "";
try {
File jsonFile = new File(fileName);
FileReader fileReader = new FileReader(jsonFile);
Reader reader = new InputStreamReader(new FileInputStream(jsonFile), "utf-8");
int ch = 0;
StringBuffer sb = new StringBuffer();
while ((ch = reader.read()) != -1) {
sb.append((char) ch);
}
fileReader.close();
reader.close();
jsonStr = sb.toString();
return jsonStr;
} catch (IOException e) {
e.printStackTrace();
return null;
}
}
public static Map getParameters(String fileName) {
String path = JsonUtil.class.getClassLoader().getResource(fileName).getPath();
String s = readJsonFile(path);
Map maps = (Map) JSON.parse(s);
return maps;
}
/**
* 递归解析JSONObject转换成map
* 存在的问题:如果json数据中存在一样的key,则后面的值会覆盖前面的key
*
* @param jsonObject
* @return
*/
public static Map<String, Object> analysis(JSONObject jsonObject) {
Map<String, Object> result = new HashMap<>();
Set<String> keys = jsonObject.keySet();
keys.parallelStream().forEach(key -> {
Object value = jsonObject.get(key);
if (value instanceof JSONObject) {
JSONObject valueJsonObject = (JSONObject) value;
result.putAll(analysis(valueJsonObject));
} else if (value instanceof JSONArray) {
JSONArray jsonArray = (JSONArray) value;
if (jsonArray.size() == 0) {
return;
}
if (jsonArray.size() > 0) {
if (jsonArray.get(0) instanceof JSONArray || jsonArray.get(0) instanceof JSONObject) {
analysisJSONArray(jsonArray, result);
} else {
result.put(key, value);
}
}
} else {
result.put(key, value);
}
});
return result;
}
/**
* 递归解析JSONArray
*
* @param jsonArray
* @param map
*/
private static void analysisJSONArray(JSONArray jsonArray, Map<String, Object> map) {
jsonArray.parallelStream().forEach(json -> {
if (json instanceof JSONObject) {
JSONObject valueJsonObject = (JSONObject) json;
map.putAll(analysis(valueJsonObject));
} else if (json instanceof JSONArray) {
JSONArray tmpJsonArray = (JSONArray) json;
if (tmpJsonArray.size() == 0) {
return;
}
analysisJSONArray(tmpJsonArray, map);
}
});
}
public static void main(String[] args) {
String test = "";
JSONObject jsonObject = JSON.parseObject(test);
//递归解析json
Map<String, Object> analysis = analysis(jsonObject);
}
}