在Java项目里处理JSON时,JSON.simple是一个轻量且易用的工具库。虽然它并没有官方定义的JsonNode类,但我们可以用JSONObject和JSONArray组合出类似JsonNode的树状结构,并通过遍历与类型判断完成解析。下面介绍具体做法。

引入依赖与基本解析
首先通过Maven引入JSON.simple,然后利用JSONParser将字符串解析为顶层对象。通常顶层是JSONObject或JSONArray。
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;
public class Demo {
public static void main(String[] args) {
String text = "{"name":"Tom","age":20,"hobbies":["read","run"]}";
JSONParser parser = new JSONParser();
try {
// 解析后强制转为JSONObject,相当于根节点
JSONObject root = (JSONObject) parser.parse(text);
System.out.println(root.get("name"));
} catch (ParseException e) {
e.printStackTrace();
}
}
}
遍历类似JsonNode的字段
JSONObject内部以键值对存储,可借助keySet方法获取所有键,再逐个取值。若值是JSONObject或JSONArray,则继续向下遍历,形成递归访问。
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import java.util.Set;
public class Walk {
// 递归打印节点
static void walk(Object node) {
if (node instanceof JSONObject) {
JSONObject obj = (JSONObject) node;
Set<String> keys = obj.keySet();
for (String k : keys) {
System.out.println("key:" + k);
walk(obj.get(k));
}
} else if (node instanceof JSONArray) {
JSONArray arr = (JSONArray) node;
for (Object item : arr) {
walk(item);
}
} else {
System.out.println("value:" + node);
}
}
}
判断节点类型并提取数据
在遍历过程中,用instanceof判断当前节点是对象、数组还是基本类型,可避免强制转换出错。下表列出常见类型与处理方式。
| 节点实例 | 处理方式 |
|---|---|
| JSONObject | 使用keySet遍历键,get方法取值 |
| JSONArray | 使用for循环按索引或迭代器访问 |
| String/Long/Double/Boolean | 直接作为基本值使用 |
读取数组元素的示例
当确认某字段是JSONArray时,可将其转换为JSONArray并循环读取,每个元素再按上述规则判断。
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
public class ReadArray {
static void readHobbies(JSONObject root) {
Object val = root.get("hobbies");
if (val instanceof JSONArray) {
JSONArray list = (JSONArray) val;
for (int i = 0; i < list.size(); i++) {
System.out.println("hobby" + i + ":" + list.get(i));
}
}
}
}
处理嵌套对象
如果JSON有多层嵌套,例如用户下包含地址对象,可连续用get取出子对象再遍历。注意在调用get前确保父节点存在且类型正确。
import org.json.simple.JSONObject;
public class Nested {
static void readAddress(JSONObject root) {
Object userObj = root.get("user");
if (userObj instanceof JSONObject) {
JSONObject user = (JSONObject) userObj;
Object addrObj = user.get("address");
if (addrObj instanceof JSONObject) {
JSONObject addr = (JSONObject) addrObj;
System.out.println(addr.get("city"));
}
}
}
}
小结
JSON.simple虽然没有JsonNode类,但用JSONObject与JSONArray配合递归和类型判断,就能实现同样的遍历解析能力。实际开发中建议封装通用的walk方法,并针对字段不存在或类型不符做防御性处理,代码会更稳健。
JavaJSON_simpleJsonNode修改时间:2026-07-30 20:45:21