\documentclass[10pt,a4paper]{article} % Packages \usepackage{fancyhdr} % For header and footer \usepackage{multicol} % Allows multicols in tables \usepackage{tabularx} % Intelligent column widths \usepackage{tabulary} % Used in header and footer \usepackage{hhline} % Border under tables \usepackage{graphicx} % For images \usepackage{xcolor} % For hex colours %\usepackage[utf8x]{inputenc} % For unicode character support \usepackage[T1]{fontenc} % Without this we get weird character replacements \usepackage{colortbl} % For coloured tables \usepackage{setspace} % For line height \usepackage{lastpage} % Needed for total page number \usepackage{seqsplit} % Splits long words. %\usepackage{opensans} % Can't make this work so far. Shame. Would be lovely. \usepackage[normalem]{ulem} % For underlining links % Most of the following are not required for the majority % of cheat sheets but are needed for some symbol support. \usepackage{amsmath} % Symbols \usepackage{MnSymbol} % Symbols \usepackage{wasysym} % Symbols %\usepackage[english,german,french,spanish,italian]{babel} % Languages % Document Info \author{Giang.nd2508} \pdfinfo{ /Title (rest-assured-extract-value-by-gpath.pdf) /Creator (Cheatography) /Author (Giang.nd2508) /Subject (Rest-Assured: Extract value by GPath Cheat Sheet) } % Lengths and widths \addtolength{\textwidth}{6cm} \addtolength{\textheight}{-1cm} \addtolength{\hoffset}{-3cm} \addtolength{\voffset}{-2cm} \setlength{\tabcolsep}{0.2cm} % Space between columns \setlength{\headsep}{-12pt} % Reduce space between header and content \setlength{\headheight}{85pt} % If less, LaTeX automatically increases it \renewcommand{\footrulewidth}{0pt} % Remove footer line \renewcommand{\headrulewidth}{0pt} % Remove header line \renewcommand{\seqinsert}{\ifmmode\allowbreak\else\-\fi} % Hyphens in seqsplit % This two commands together give roughly % the right line height in the tables \renewcommand{\arraystretch}{1.3} \onehalfspacing % Commands \newcommand{\SetRowColor}[1]{\noalign{\gdef\RowColorName{#1}}\rowcolor{\RowColorName}} % Shortcut for row colour \newcommand{\mymulticolumn}[3]{\multicolumn{#1}{>{\columncolor{\RowColorName}}#2}{#3}} % For coloured multi-cols \newcolumntype{x}[1]{>{\raggedright}p{#1}} % New column types for ragged-right paragraph columns \newcommand{\tn}{\tabularnewline} % Required as custom column type in use % Font and Colours \definecolor{HeadBackground}{HTML}{333333} \definecolor{FootBackground}{HTML}{666666} \definecolor{TextColor}{HTML}{333333} \definecolor{DarkBackground}{HTML}{A3A3A3} \definecolor{LightBackground}{HTML}{F3F3F3} \renewcommand{\familydefault}{\sfdefault} \color{TextColor} % Header and Footer \pagestyle{fancy} \fancyhead{} % Set header to blank \fancyfoot{} % Set footer to blank \fancyhead[L]{ \noindent \begin{multicols}{3} \begin{tabulary}{5.8cm}{C} \SetRowColor{DarkBackground} \vspace{-7pt} {\parbox{\dimexpr\textwidth-2\fboxsep\relax}{\noindent \hspace*{-6pt}\includegraphics[width=5.8cm]{/web/www.cheatography.com/public/images/cheatography_logo.pdf}} } \end{tabulary} \columnbreak \begin{tabulary}{11cm}{L} \vspace{-2pt}\large{\bf{\textcolor{DarkBackground}{\textrm{Rest-Assured: Extract value by GPath Cheat Sheet}}}} \\ \normalsize{by \textcolor{DarkBackground}{Giang.nd2508} via \textcolor{DarkBackground}{\uline{cheatography.com/134606/cs/33054/}}} \end{tabulary} \end{multicols}} \fancyfoot[L]{ \footnotesize \noindent \begin{multicols}{3} \begin{tabulary}{5.8cm}{LL} \SetRowColor{FootBackground} \mymulticolumn{2}{p{5.377cm}}{\bf\textcolor{white}{Cheatographer}} \\ \vspace{-2pt}Giang.nd2508 \\ \uline{cheatography.com/giang-nd2508} \\ \end{tabulary} \vfill \columnbreak \begin{tabulary}{5.8cm}{L} \SetRowColor{FootBackground} \mymulticolumn{1}{p{5.377cm}}{\bf\textcolor{white}{Cheat Sheet}} \\ \vspace{-2pt}Published 7th July, 2022.\\ Updated 17th October, 2024.\\ Page {\thepage} of \pageref{LastPage}. \end{tabulary} \vfill \columnbreak \begin{tabulary}{5.8cm}{L} \SetRowColor{FootBackground} \mymulticolumn{1}{p{5.377cm}}{\bf\textcolor{white}{Sponsor}} \\ \SetRowColor{white} \vspace{-5pt} %\includegraphics[width=48px,height=48px]{dave.jpeg} Measure your website readability!\\ www.readability-score.com \end{tabulary} \end{multicols}} \begin{document} \raggedright \raggedcolumns % Set font size to small. Switch to any value % from this page to resize cheat sheet text: % www.emerson.emory.edu/services/latex/latex_169.html \footnotesize % Small font. \begin{multicols*}{2} \begin{tabularx}{8.4cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{8.4cm}}{\bf\textcolor{white}{Json example 1}} \tn \SetRowColor{LightBackground} \mymulticolumn{1}{x{8.4cm}}{\{ \newline "store": \{ \newline "book": {[} \newline \{ \newline "category": "reference", \newline "author": "Nigel Rees", \newline "title": "Sayings of the Century", \newline "price": 8.95 \newline \}, \newline \{ \newline "category": "fiction", \newline "author": "Evelyn Waugh", \newline "title": "Sword of Honour", \newline "price": 12.99 \newline \}, \newline \{ \newline "category": "fiction", \newline "author": "Herman Melville", \newline "title": "Moby Dick", \newline "isbn": "0-553-21311-3", \newline "price": 8.99 \newline \}, \newline \{ \newline "category": "fiction", \newline "author": "J. R. R. Tolkien", \newline "title": "The Lord of the Rings", \newline "isbn": "0-395-19395-8", \newline "price": 22.99 \newline \} \newline {]}, \newline "bicycle": \{ \newline "color": "red", \newline "price": 19.95 \newline \} \newline \} \newline \}} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{8.4cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{8.4cm}}{\bf\textcolor{white}{Extract value from Example 1}} \tn \SetRowColor{LightBackground} \mymulticolumn{1}{x{8.4cm}}{- {\bf{Read the json: String -{}-\textgreater{} JsonPath}} \newline JsonPath jsonPath = JsonPath.from(res); \newline \newline - {\bf{First category}} \newline jsonPath.getString("store.book{[}0{]}.category"); \newline //reference \newline \newline - {\bf{All category}} \newline jsonPath.getList("store.book.category"); \newline //{[}reference, fiction, fiction, fiction{]} \newline \newline - {\bf{All author that have price \textgreater{} 10}} \newline jsonPath.getList("store.book.findAll \{it.price \textgreater{} 10\}.author"); \newline //{[}Evelyn Waugh, J. R. R. Tolkien{]} \newline \newline - {\bf{All author that have category = fiction}} \newline jsonPath.getList("store.book.findAll \{it.category == 'fiction'\}.author"); \newline //{[}Evelyn Waugh, Herman Melville, J. R. R. Tolkien{]} \newline \newline - {\bf{Count number of author}} \newline jsonPath.getInt("store.book.author.size()"); \newline //4 \newline \newline - {\bf{First author that have price \textgreater{} 10}} \newline jsonPath.getString("store.book.find \{it.price \textgreater{} 10\}.author"); \newline //Evelyn Waugh \newline \newline - {\bf{Color of bicycle}} \newline jsonPath.getString("store.bicycle.color"); \newline //red} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{8.4cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{8.4cm}}{\bf\textcolor{white}{Convert to Array or List of Object}} \tn \SetRowColor{LightBackground} \mymulticolumn{1}{x{8.4cm}}{{\bf{- Response}} \newline \newline {[} \newline \{ \newline "id": "11", \newline "name": "abc" \newline \} \newline {]} \newline \newline {\bf{- POJO}} \newline \newline @Data \newline public class Root \{ \newline private String id; \newline private String name; \newline \} \newline \newline {\bf{- Convert to object}} \newline \newline Root root = given()....extract().as(Root{[}{]}.class){[}0{]}; \newline \newline or \newline \newline Root root = \seqsplit{given()....extract().jsonPath().getList(""}, Root.class).get(0);} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{8.4cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{8.4cm}}{\bf\textcolor{white}{Json Example 2 - extract}} \tn \SetRowColor{LightBackground} \mymulticolumn{1}{x{8.4cm}}{\{ \newline "foo.bar.baz": \{ \newline "0.2.0": "test" \newline \} \newline \} \newline \newline JsonPath.from(json).getString("'foo.bar.baz'.'0.2.0'") \newline //test \newline \newline \newline \{ \newline "a-b": "minus", \newline "a.b": "dot", \newline "a.b-c": "both" \newline \} \newline \newline JsonPath.from(json).getString("'a.b-c'"); \newline //both \newline \newline \{ \newline "map": \{ \newline "true": 12.3, \newline "false": 15.0 \newline \} \newline \} \newline \newline JsonPath.from(json).getFloat("map.'false'") \newline //15.0f \newline \newline JsonPath.from(json).getFloat("map.'true'") \newline //12.3f} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{8.4cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{8.4cm}}{\bf\textcolor{white}{Json Example 3 - extract}} \tn \SetRowColor{LightBackground} \mymulticolumn{1}{x{8.4cm}}{\{ \newline "semester": "Fall 2015", \newline "groups": {[} \newline \{ \newline "siteUrl": \seqsplit{"http://cphbusinessjb.cloudapp.net/CA2/"}, \newline "error": "NO AUTHOR/CLASS-INFO" \newline \}, \newline \{ \newline "siteUrl": \seqsplit{"http://ca2-ebski.rhcloud.com/CA2New/"}, \newline "authors": "Ebbe, Kasper, Christoffer", \newline "class": "A klassen", \newline "group": "Gruppe: Johns Llama Herders A/S" \newline \}, \newline \{ \newline "siteUrl": \seqsplit{"http://ca2-chrislind.rhcloud.com/CA2Final/"}, \newline "error": "NO AUTHOR/CLASS-INFO" \newline \}, \newline \{ \newline "siteUrl": \seqsplit{"http://ca2-pernille.rhcloud.com/NYCA2/"}, \newline "authors": "Marta, Jeanette, Pernille", \newline "class": "DAT A", \newline "group": "Group: MJP" \newline \}, \newline \{ \newline "siteUrl": \seqsplit{"https://ca2-afn.rhcloud.com:8443/company.jsp"}, \newline "error": "NO AUTHOR/CLASS-INFO" \newline \}, \newline \{ \newline "siteUrl": \seqsplit{"http://ca-smcphbusiness.rhcloud.com/ca2/index.jsp"}, \newline "authors": "Mikkel, Steffen, B Andersen", \newline "class": "A Class Computer Science", \newline "group": "1" \newline \} \newline {]} \newline \} \newline \newline JsonPath.from(json).getList("groups.getAt('class')"); \newline //{[}null, A klassen, null, DAT A, null, A Class Computer Science{]} \newline \newline - {\bf{Additional: how to move null from a list}} \newline list.removeAll(Collections.singleton(null)); \newline System.out.println("list = " + list); \newline //{[}A klassen, DAT A, A Class Computer Science{]}} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{8.4cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{8.4cm}}{\bf\textcolor{white}{Special cases}} \tn \SetRowColor{LightBackground} \mymulticolumn{1}{x{8.4cm}}{//Multiple nested arrays \newline \newline JsonPath.from(response) \newline .get("communicationPolicy.rules.flatten() \newline .findAll \{it.test1 == 'TRANSACTIONAL'\} \newline .value.flatten().findAll \{it.channel == 'EMAIL'\}.value"); \newline \newline System.out.println(value); \newline \newline //Check contains \newline "response.data.tasks.findAll\{ \newline \seqsplit{it.triggered\_by.contains(restAssuredJsonRootObject.response.data.tasks}.find\{ \newline it.name.equals('InvestigateSuggestions')\}.id) \}.name" \newline \newline restAssuredJsonRootObject -{}-\textgreater{} refer to root of json \newline \newline var text = """ \newline {[} \newline {[} \newline "Test1", \newline "Test2" \newline {]}, \newline {[} \newline "Test3", \newline "Test4" \newline {]} \newline {]} \newline """; \newline \newline List\textless{}String\textgreater{} json = JsonPath.from(text).get("collect\{it.getAt(0)\}"); \newline System.out.println("json = " + json); \newline //json = {[}Test1, Test3{]}} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} % That's all folks \end{multicols*} \end{document}