第二章寫了一種自己寫的方法來查找json字符串中的值,其實(shí)jackson還提供一個(gè)find方法來查找json字符串中的值。今天我們一起來看看這個(gè)方法的使用……
按照慣例我先貼上代碼
-
-
-
-
-
-
- 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");
-
- }
哈哈,這樣寫是不是比第二篇里面的方便多了?但是有個(gè)缺點(diǎn)啊,不能指定路徑。也就是說它會(huì)把當(dāng)前json字符串中的所有匹配屬性的值都取出來,如果你沒有指定路徑的要求 這種方法無疑很方便。
好了貼上兩個(gè)方法的代碼……
-
-
-
-
-
-
-
- public static List<String> getValueByFind(JsonNode node, String path) throws Exception {
- List<String> values = new ArrayList<String>();
-
-
-
-
- node.findValuesAsText(path, values);
- System.out.println(Arrays.toString(values.toArray()));
- return values;
- }
-
-
-
-
-
-
-
-
- public static int getFirstValueByFind(JsonNode node, String path) throws Exception {
-
-
-
-
- int value = node.findValue(path).asInt();
- System.out.println(value);
- return value;
- }
其實(shí)Jackson中的JsonNode還有許多其它方法,都可以根據(jù)名字來看出它的含義??梢試L試著進(jìn)行學(xué)習(xí)……