Jackson第四編【Findメソッド値探し】
第2章では、json文字列の値を検索するために自分で書く方法を書いたが、jacksonはjson文字列の値を検索するためにfind方法を提供している.今日はこの方法の使い方を見てみましょう.
慣例に従ってコードを貼ります
ははは、このように書くのは第2編の中の便利さよりずっと多いのではないでしょうか.しかし、パスを指定できないという欠点があります.つまり、現在のjson文字列のすべての一致する属性の値を取り出します.パスを指定する必要がなければ、この方法は便利です.
よし2つの方法のコードを貼って・・・
実はジャックソンのJsonNodeには他にも多くの方法があり、名前によってその意味を見ることができます.勉強してみてもいいですが・・・
慣例に従ってコードを貼ります
/**
*
*
* @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には他にも多くの方法があり、名前によってその意味を見ることができます.勉強してみてもいいですが・・・