Jackson第四篇【Find方法寻值】

本文介绍了Jackson库中find方法在查找JSON字符串值的应用。相较于自定义方法,find方法提供了更简便的方式,但不支持指定路径,会返回所有匹配属性的值。示例代码展示了其便捷性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第二章写了一种自己写的方法来查找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还有许多其它方法,都可以根据名字来看出它的含义。可以尝试着进行学习……
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值