BlazerOfIT / 我的图书馆 / Jackson第四篇【Find方法寻值】

分享

   

Jackson第四篇【Find方法寻值】

2012-04-29  BlazerOfIT

第二章写了一种自己写的方法来查找json字符串中的值,其实jackson还提供一个find方法来查找json字符串中的值。今天我们一起来看看这个方法的使用……

按照惯例我先贴上代码

  1. /** 
  2.  * 具体的类我就不贴出来浪费空间了 
  3.  *  
  4.  * @param args 
  5.  * @throws Exception 
  6.  */  
  7. public static void main(String[] args) throws Exception {  
  8.     // 准备数据   
  9.     List<Person> pers = new ArrayList<Person>();  
  10.     List<Person> childs = new ArrayList<Person>();  
  11.     Person p = new Person("张三"46);  
  12.     childs.add(new Person("小张三1"20));  
  13.     childs.add(new Person("小张三2"17));  
  14.     p.setChilds(childs);  
  15.     pers.add(p);  
  16.     p = new Person("李四"29);  
  17.     childs = new ArrayList<Person>();  
  18.     childs.add(new Person("小李四1"20));  
  19.     p.setChilds(childs);  
  20.     pers.add(p);  
  21.     p = new Person("王二麻子"23);  
  22.     pers.add(p);  
  23.     TestVo vo = new TestVo(null, pers);  
  24.     ObjectMapper mapper = JsonProcessUtil.getMapperInstance(false);  
  25.     String voJson = JsonProcessUtil.toJson(vo);  
  26.     JsonNode node = mapper.readTree(voJson);  
  27.     getValueByFind(node, "age");  
  28.     getFirstValueByFind(node, "age");  
  29.   
  30. }  


 

哈哈,这样写是不是比第二篇里面的方便多了?但是有个缺点啊,不能指定路径。也就是说它会把当前json字符串中的所有匹配属性的值都取出来,如果你没有指定路径的要求 这种方法无疑很方便。

好了贴上两个方法的代码……

  1. /** 
  2.  * 使用find的方法从实体中取出所有匹配的值 
  3.  *  
  4.  * @param vo 
  5.  * @param path 
  6.  * @return 
  7.  */  
  8. public static List<String> getValueByFind(JsonNode node, String path) throws Exception {  
  9.     List<String> values = new ArrayList<String>();  
  10.     /* 
  11.      * values = node.findValuesAsText(path); 这里提供两种方法 一种是只填写path 
  12.      * 它会返回List<String>,另外一种就是下面用的 它会直接把找到的value填到你传入的集合中 
  13.      */  
  14.     node.findValuesAsText(path, values);  
  15.     System.out.println(Arrays.toString(values.toArray()));  
  16.     return values;  
  17. }  


 

  1. /** 
  2.  * 查找当前Node中第一个匹配的值 
  3.  *  
  4.  * @param node 
  5.  * @param path 
  6.  * @return 
  7.  * @throws Exception 
  8.  */  
  9. public static int getFirstValueByFind(JsonNode node, String path) throws Exception {  
  10.     /* 
  11.      * 注意这点不能使用getTextValue()方法,因为找到的值为Int类型的所以使用getTextValue是查不到值的。 
  12.      * 不过如果想返回String字符串可以使用asText()方法。这里使用asInt是为了看到其实JackSon是可以直接返回相应类型的值的。 
  13.      */  
  14.     int value = node.findValue(path).asInt();  
  15.     System.out.println(value);  
  16.     return value;  
  17. }  


 

其实Jackson中的JsonNode还有许多其它方法,都可以根据名字来看出它的含义。可以尝试着进行学习……

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多
    喜欢该文的人也喜欢 更多

    ×
    ×

    ¥.00

    微信或支付宝扫码支付:

    开通即同意《个图VIP服务协议》

    全部>>