java递归解析json字符串
温馨提示:
本文最后更新于 2022年09月11日,已超过 831 天没有更新。若文章内的图片失效(无法正常加载),请留言反馈或直接联系我。
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())) {
// 如果是json集合那就取集合下面的每一个分别去递归解析
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())) {
// 如果是json对象那就递归解析
result.put(entry.getKey(), parseStr2JsonObj(entry.getValue().toString()));
}else {
// 不是json对象直接赋值
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对象,都可以进行解析
正文到此结束
- 本文标签: fastjson
- 本文链接: https://www.it1997.com/article/108
- 版权声明: 本文由小陈没烦恼原创发布,转载请遵循《署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)》许可协议授权