Fastjson 解析嵌套 JSONArray 获取值的常见陷阱与解决方案
在 Java 开发中,处理后端返回的 JSON 数据是家常便饭。有时候数据结构会比较深,尤其是当某个字段的值本身就是一个 JSONArray,而里面还套着数组或对象时,直接取值很容易踩坑。
最近有个需求,需要从一段 JSON 数据里把 "20180612" 这个日期字符串取出来。用的库是阿里巴巴的 Fastjson。
为什么直接取值会报错?
拿到数据后,如果发现对应字段的 Value 不是 String,而是 JSONArray,这时候如果强行用 getString() 或者做类型强转,大概率会抛出 ClassCastException。
很多新手会写成这样:
JSONObject jsonObject = JSON.parseObject(jsonStr);
// 风险操作:Value 其实是 JSONArray
String date = jsonObject.getString("targetKey");
这显然拿不到东西,甚至程序直接崩掉。
实战解析方案
要想稳妥地拿到嵌套里的值,得顺着层级一步步走。先拿到外层的数组,再根据索引定位内层元素,最后才是具体的字符串。
下面这段代码展示了完整的处理流程,你可以直接参考其中的类型判断逻辑:
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
public class JsonResolver {
public static void main(String[] args) {
// 模拟包含嵌套数组的 JSON 数据
String jsonStr = "{\"result\": [[\"20180612\", \"detail\"]]}";
JSONObject root = JSON.parseObject(jsonStr);
try {
// 1. 先获取名为 result 的 JSONArray
JSONArray outerArray = root.getJSONArray("result");
(outerArray != && !outerArray.isEmpty()) {
outerArray.get();
(item JSONArray) {
(JSONArray) item;
innerArray.getString();
System.out.println(targetDate);
}
}
} (Exception e) {
e.printStackTrace();
}
}
}


