xdm 中秋快乐,今天记录一下java递归解析json字符串
fastjson并不支持解析多层级的json
比如json下面还有json字符串,不能直接将其转换成json对象
由于自己有这方面的需求,所以就来记录一下自己的实现
一共分为三种情况:
①解析出来的是字符串那就直接赋值
②解析出来的是json对象那就递归进行解析
③解析出来的是数组那就循环所有的进行解析(还是分三种情况)
现在我们有这样一个json,为了代码简洁,我们从本地文件中读取
package com.it1997.utils;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONException;
import com.alibaba.fastjson.JSONObject;
import org.apache.commons.io.FileUtils;
import org.apache.commons.lang.StringUtils;
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
public class JsonUtil {
* 解析json字符串
* @param str
* @return
public static JSONObject parseStr2JsonObj(String str) {
JSONObject result = new JSONObject();
JSONObject strJson = new JSONObject();
try {
strJson = JSONObject.parseObject(str);
} catch (JSONException e) {
throw new JSONException("参数格式不正确");
for (Map.Entry<String, Object> entry : strJson.entrySet()) {
if (StringUtils.isEmpty(entry.getValue().toString())) {
continue;
if (isJsonArray(entry.getValue().toString())) {
List list = new ArrayList();
for (Object o : JSONObject.parseArray(entry.getValue().toString())) {
JSONObject jsonObject = o instanceof JSONObject ? ((JSONObject) o) : null;
list.add(parseStr2JsonObj(jsonObject.toString()));
result.put(entry.getKey(), list);
} else if (isJsonObj(entry.getValue().toString())) {
result.put(entry.getKey(), parseStr2JsonObj(entry.getValue().toString()));
}else {
result.put(entry.getKey(), entry.getValue());
return result;
* 判断字符串是否是json类型的
* @param str
* @return
private static boolean isJsonObj(String str) {
if (StringUtils.isBlank(str)) {
return false;
try {
JSONObject.parseObject(str);
return true;
} catch (Exception e) {
return false;
* 判断字符串是否是json集合
* @param str
* @return
private static boolean isJsonArray(String str) {
if (StringUtils.isBlank(str)) {
return false;
try {
JSONObject.parseArray(str);
return true;
} catch (Exception e) {
return false;
public static void main(String[] args) throws IOException {
File file = new File("D:/home/cxc/json.txt");
String content = FileUtils.readFileToString(file,"UTF-8");
JSONObject jsonObject = parseStr2JsonObj(content);
System.out.println(jsonObject);
这里可以看到无论是json下是数组还是json对象,都可以进行解析
正文到此结束