Jackson第四篇【Find方法尋值】

第二章寫了一種自己寫的方法來查找json字符串中的值,其實jackson還提供一個find方法來查找json字符串中的值。今天我們一起來看看這個方法的使用……

按照慣例我先貼上代碼

	/**
	 * 具體的類我就不貼出來浪費空間了
	 * 
	 * @param args
	 * @throws Exception
	 */
	public static void main(String[] args) throws Exception {
		// 準備數據
		List<Person> pers = new ArrayList<Person>();
		List<Person> childs = new ArrayList<Person>();
		Person p = new Person("張三", 46);
		childs.add(new Person("小張三1", 20));
		childs.add(new Person("小張三2", 17));
		p.setChilds(childs);
		pers.add(p);
		p = new Person("李四", 29);
		childs = new ArrayList<Person>();
		childs.add(new Person("小李四1", 20));
		p.setChilds(childs);
		pers.add(p);
		p = new Person("王二麻子", 23);
		pers.add(p);
		TestVo vo = new TestVo(null, pers);
		ObjectMapper mapper = JsonProcessUtil.getMapperInstance(false);
		String voJson = JsonProcessUtil.toJson(vo);
		JsonNode node = mapper.readTree(voJson);
		getValueByFind(node, "age");
		getFirstValueByFind(node, "age");

	}


 

哈哈,這樣寫是不是比第二篇裏面的方便多了?但是有個缺點啊,不能指定路徑。也就是說它會把當前json字符串中的所有匹配屬性的值都取出來,如果你沒有指定路徑的要求 這種方法無疑很方便。

好了貼上兩個方法的代碼……

	/**
	 * 使用find的方法從實體中取出所有匹配的值
	 * 
	 * @param vo
	 * @param path
	 * @return
	 */
	public static List<String> getValueByFind(JsonNode node, String path) throws Exception {
		List<String> values = new ArrayList<String>();
		/*
		 * values = node.findValuesAsText(path); 這裏提供兩種方法 一種是隻填寫path
		 * 它會返回List<String>,另外一種就是下面用的 它會直接把找到的value填到你傳入的集合中
		 */
		node.findValuesAsText(path, values);
		System.out.println(Arrays.toString(values.toArray()));
		return values;
	}


 

	/**
	 * 查找當前Node中第一個匹配的值
	 * 
	 * @param node
	 * @param path
	 * @return
	 * @throws Exception
	 */
	public static int getFirstValueByFind(JsonNode node, String path) throws Exception {
		/*
		 * 注意這點不能使用getTextValue()方法,因爲找到的值爲Int類型的所以使用getTextValue是查不到值的。
		 * 不過如果想返回String字符串可以使用asText()方法。這裏使用asInt是爲了看到其實JackSon是可以直接返回相應類型的值的。
		 */
		int value = node.findValue(path).asInt();
		System.out.println(value);
		return value;
	}


 

其實Jackson中的JsonNode還有許多其它方法,都可以根據名字來看出它的含義。可以嘗試着進行學習……
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章