Jackson是Java開發(fā)中常用的一個JSON解析庫。有時候我們需要獲取一個JSON串中指定路徑的數(shù)據(jù),Jackson提供了很好的支持。
假設(shè)有如下JSON數(shù)據(jù):
{ "name": "Tom", "age": 18, "address": { "province": "Guangdong", "city": "Shenzhen", "street": "Nanshan district" }, "hobbies": ["reading", "swimming", "running"] }
如果我們想要獲取"address"下面的"city",可以使用下面的代碼:
String jsonStr = "{...}"; // 上面的JSON數(shù)據(jù) ObjectMapper mapper = new ObjectMapper(); JsonNode jsonNode = mapper.readTree(jsonStr); // 讀取JSON字符串成JsonNode對象 String city = jsonNode.path("address").path("city").asText(); System.out.println(city); // Shenzhen
上面的代碼中,首先將JSON字符串讀取成JsonNode對象,然后通過path()
方法依次指定路徑,最后調(diào)用asText()
方法獲取指定節(jié)點的文本值。
需要注意的是,如果指定的節(jié)點不存在或者節(jié)點類型不匹配,asText()
方法會返回一個空字符串。如果找不到指定的節(jié)點,可以通過使用get()
代替path()
,會拋出一個NullPointerException
異常,例如:
JsonNode cityNode = jsonNode.get("address").get("city"); if (cityNode != null) { String city = cityNode.asText(); System.out.println(city); // Shenzhen } else { System.out.println("Can't find the city node."); }
上面的代碼中,先通過get()
方法獲取節(jié)點,如果找不到會返回null
,然后判斷是否為null
再進(jìn)行后續(xù)操作。
總之,Jackson提供了非常靈活的方法來獲取指定節(jié)點的數(shù)據(jù),在實際開發(fā)中應(yīng)用廣泛。