主页 > 电脑硬件  > 

使用Jackson提取JSON数据值-JsonUtils工具类

使用Jackson提取JSON数据值-JsonUtils工具类
提取值

JsonUtils工具类提供了一个extractValue方法,用于从JSON数据中提取特定字段的值。该方法支持返回单一值或值列表,具体取决于JSON数据中字段的类型。

/** * 从 JSON 数据中提取值 * * @param jsonData JSON 数据字符串 * @param field 字段名称 * @return 提取到的值,如果是列表则返回列表 */ public static Object extractValue(String jsonData, String field) { try { ObjectMapper objectMapper = new ObjectMapper(); JsonNode jsonNode = objectMapper.readTree(jsonData); // 使用 JsonNode.at 方法获取指定路径的节点 JsonNode targetNode = jsonNode.at(field); // 如果节点是列表,将列表转换为 Java List if (targetNode.isArray()) { List<String> values = new ArrayList<>(); Iterator<JsonNode> elements = targetNode.elements(); while (elements.hasNext()) { values.add(elements.next().asText()); } return values; } else { // 如果节点不是列表,直接返回节点的文本值 return targetNode.asText(); } } catch (Exception e) { e.printStackTrace(); return null; } } 示例用法

为了演示JsonUtils的使用,提供了一个简单的示例。以下是一个包含姓名、年龄和爱好的JSON数据:

{ "root": { "person": { "name": "坤坤", "age": 99, "hobbies": ["唱跳", "rap"] } } } public static void main(String[] args) { // JSON 数据示例,包含列表 String jsonData = """ { "root": { "person": { "name": "坤坤", "age": 99, "hobbies": ["唱跳", "rap"] } } } """; // 使用工具类提取数据 String name = String.valueOf(extractValue(jsonData, "/root/person/name")); Double age = Double.valueOf(String.valueOf(extractValue(jsonData, "/root/person/age"))); List hobbies = (List) extractValue(jsonData, "/root/person/hobbies"); // 输出提取到的数据 System.out.println("Name: " + name); System.out.println("Age: " + age); if (hobbies != null) { System.out.println(hobbies.size()); System.out.println("Hobbies: " + hobbies); } else { System.out.println("Hobbies: " + null); } }

在此示例中,展示了如何使用JsonUtils从JSON数据中提取姓名、年龄和爱好。JsonUtils能够适应不同类型的字段,并返回相应的Java对象。 完整代码:

package com.lfsun.json.util; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import java.util.ArrayList; import java.util.Iterator; import java.util.List; /** * JsonUtils 是一个使用 Jackson 处理 JSON 数据的工具类。 * * @author Administrator */ public class JsonUtils { /** * 从 JSON 数据中提取值 * * @param jsonData JSON 数据字符串 * @param field 字段名称 * @return 提取到的值,如果是列表则返回列表 */ public static Object extractValue(String jsonData, String field) { try { ObjectMapper objectMapper = new ObjectMapper(); JsonNode jsonNode = objectMapper.readTree(jsonData); // 使用 JsonNode.at 方法获取指定路径的节点 JsonNode targetNode = jsonNode.at(field); // 如果节点是列表,将列表转换为 Java List if (targetNode.isArray()) { List<String> values = new ArrayList<>(); Iterator<JsonNode> elements = targetNode.elements(); while (elements.hasNext()) { values.add(elements.next().asText()); } return values; } else { // 如果节点不是列表,直接返回节点的文本值 return targetNode.asText(); } } catch (Exception e) { e.printStackTrace(); return null; } } public static void main(String[] args) { // JSON 数据示例,包含列表 String jsonData = """ { "root": { "person": { "name": "坤坤", "age": 99, "hobbies": ["唱跳", "rap"] } } } """; // 使用工具类提取数据 String name = String.valueOf(extractValue(jsonData, "/root/person/name")); Double age = Double.valueOf(String.valueOf(extractValue(jsonData, "/root/person/age"))); List hobbies = (List) extractValue(jsonData, "/root/person/hobbies"); // 输出提取到的数据 System.out.println("Name: " + name); System.out.println("Age: " + age); if (hobbies != null) { System.out.println(hobbies.size()); System.out.println("Hobbies: " + hobbies); } else { System.out.println("Hobbies: " + null); } } }

依赖:

<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> </dependency>
标签:

使用Jackson提取JSON数据值-JsonUtils工具类由讯客互联电脑硬件栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“使用Jackson提取JSON数据值-JsonUtils工具类