REST Assured 45 - Fetch Value From Nested JSON Object Using JsonNode – Jackson – At() Method
2021/9/19 14:06:10
本文主要是介绍REST Assured 45 - Fetch Value From Nested JSON Object Using JsonNode – Jackson – At() Method,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
REST Assured 系列汇总 之 REST Assured 45 - Fetch Value From Nested JSON Object Using JsonNode – Jackson – At() Method
介绍
创建 POJO 类用来解析和获取一个 JSON 字符串中的值有时并不方便,特别针对那些非常长的,多层嵌套的 JSON。我们可以将 JSON 解析成树形结构更方便。
前提条件
因为我们用到 Jackson API, 所以确保导入 Jackson Databind 依赖包。
<!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind --> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.11.1</version> </dependency>
嵌套的 JSON Object
JSON Object
{ "firstName": "Amod", "lastName": "Mahajan", "married": false, "salary": 2000.54, "addressPin": 45324, "skill" :{ "Java" :"Intermediate", "Selenium" :"Intermediate", "Javascript" :"Beginner" } }
树形结构:
你可以用一个在线工具 来浏览上面的 JSON,呈现树型结构:
树形结构可能通过 path 方便定位到 node,这个 path 就像 HTML DOM 的 XPATH。
Deserialize 反序列化嵌套的 JSON Object
我们用到 Jackson API 的 ObjectMapper 类,该类提供的 “readTree()” 方法负责将 JSON 内容 deserialization 反序列化成树形形式的JsonNode 集合
我们通过 JsonNode 类的 get() 和 path() 方法来获取值,然后转换成适合的数据类型。
前一篇文章 Fetch Value From JSON Object Using JsonNode – Jackson – Get() & Path() Methods,针对的是一个简单的 JSON Object,字段是 1 对 1 的对应关系。本文是针对嵌套的 JSON Object, 一个键值包含的是另外一个 JSON Object。
我们可以用 get() 或 path() 方法来遍历一个嵌套的 JSON Object,如下:
// Using chaining of get() methods String javaLevel = jsonTree.get("skills").get("Java").asText(); System.out.println(javaLevel); // Using chaining of path() methods String javaLevel2 = jsonTree.path("skills").path("Java").asText(); System.out.println(javaLevel2);
或许有更长的,嵌套更深的 JSON Object,我们也可以用 at() 方法来代替,接收一个 node 的 path,跟文件 path 类似。
// Using pattern expression with at() String javaLevel3 = jsonTree.at("/skills/Java").asText(); System.out.println(javaLevel3);
如果没有匹配的 node 存在,at() 方法也不会返回 null,而是返回一个 node,但是这个 node 的方法 isMissingNode() 返回为 true.
代码:
import org.junit.Test; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.JsonMappingException; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; public class ParseNestedJsonObjectToReadValues { @Test public void parseJsonObjectToReadValues() throws JsonMappingException, JsonProcessingException { String jsonObject = "{\r\n" + " \"firstName\": \"Amod\",\r\n" + " \"lastName\": \"Mahajan\",\r\n" + " \"married\": false,\r\n" + " \"salary\": 2000.54,\r\n" + " \"addressPin\": 45324,\r\n" + " \"skills\" :{\r\n" + " \"Java\" :\"Intermediate\",\r\n" + " \"Selenium\" :\"Intermediate\",\r\n" + " \"Javascript\" :\"Beginner\"\r\n" + " }\r\n" + "}"; // Creating an instance of ObjectMapper class ObjectMapper objectMapper = new ObjectMapper(); // Get tree representation of json JsonNode jsonTree = objectMapper.readTree(jsonObject); // Using chaining of get() methods String javaLevel = jsonTree.get("skills").get("Java").asText(); System.out.println(javaLevel); // Using chaining of path() methods String javaLevel2 = jsonTree.path("skills").path("Java").asText(); System.out.println(javaLevel2); // Using pattern expression with at() String javaLevel3 = jsonTree.at("/skills/Java").asText(); System.out.println(javaLevel3); } }
输出:
Intermediate Intermediate Intermediate
这篇关于REST Assured 45 - Fetch Value From Nested JSON Object Using JsonNode – Jackson – At() Method的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-15useCallback教程:React Hook入门与实践
- 2024-11-15React中使用useContext开发:初学者指南
- 2024-11-15拖拽排序js案例详解:新手入门教程
- 2024-11-15React中的自定义Hooks案例详解
- 2024-11-14受控组件项目实战:从零开始打造你的第一个React项目
- 2024-11-14React中useEffect开发入门教程
- 2024-11-14React中的useMemo教程:从入门到实践
- 2024-11-14useReducer开发入门教程:轻松掌握React中的useReducer
- 2024-11-14useRef开发入门教程:轻松掌握React中的useRef用法
- 2024-11-14useState开发:React中的状态管理入门教程