Jackson第四編【Findメソッド値探し】


第2章では、json文字列の値を検索するために自分で書く方法を書いたが、jacksonはjson文字列の値を検索するためにfind方法を提供している.今日はこの方法の使い方を見てみましょう.
慣例に従ってコードを貼ります
	/**
	 *                
	 * 
	 * @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");

	}

 
ははは、このように書くのは第2編の中の便利さよりずっと多いのではないでしょうか.しかし、パスを指定できないという欠点があります.つまり、現在のjson文字列のすべての一致する属性の値を取り出します.パスを指定する必要がなければ、この方法は便利です.
よし2つの方法のコードを貼って・・・
	/**
	 *   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;
	}

 
実はジャックソンのJsonNodeには他にも多くの方法があり、名前によってその意味を見ることができます.勉強してみてもいいですが・・・