rest-assured的JsonPath使用方法總結
阿新 • • 發佈:2018-01-11
ott tint win 包含 class 解析 integer fin 興趣
JsonPath對象解析Json格式的數據來說非常簡單,比如有下面這樣的Json數據:
1 {"lotto":{ 2 "lottoId":5, 3 "winning-numbers":[2,45,34,23,7,5,3], 4 "winners":[{ 5 "winnerId":23, 6 "numbers":[2,45,34,23,3,5] 7 },{ 8 "winnerId":54, 9 "numbers":[52,3,12,11,18,22] 10 }] 11 } 12 }
下面是一些簡單的使用實例:
1 //這裏的lottoJson代表了上面所說的json數據 2 JsonPath jsonPath = new JsonPath(lottoJson); 3 4 // 獲取lottoId 5 int lottoId = jsonPath.getInt("lotto.lottoId"); 6 7 // 獲取winning-numbers列表 8 List<string> winningNumbers = jsonPath.get("lotto.winning-numbers"); 9 10 // 下面的語句會返回一個list,list中包含23,54 11 List<integer> winningNumbers = jsonPath.get("lotto.winners.winnerId");
從上面的例子中可以看到所有的獲取路徑中我們都重復使用了lotto,為了避免這個問題,我們可以設置一個根路徑(root path):
1 //這裏lottoJson代表上面的json數據 2 JsonPath jsonPath = new JsonPath(lottoJson); 3 //設置根路徑 4 jsonPath.setRoot("lotto"); 5 6 // 獲取lottoId 7 int lottoId = jsonPath.getInt("lottoId"); 8 9 //獲取winning-numbers列表 10 List<string> winningNumbers = jsonPath.get("winning-numbers");11 12 // 下面的語句將返回一個list,list中包含23,54 13 List<integer> winningNumbers = jsonPath.get("lotto.winners.winnerId");
如果你只是對提取一個單一的值感興趣,你還可以這樣做:
1 // "from"是從JsonPath中靜態導入的 2 int lottoId = from(lottoJson).getInt("lotto.lottoId");
你也可以做一些復雜的操作,比如求winners.numbers的和:
1 int sumOfWinningNumbers = from(lottoJson). 2 getInt("lotto.winning-numbers.sum()");
或者是找出所有大於10並且winnerId=23的number:
1 // 返回結果是包含45,34 and 23的list 2 List<integer> numbers = from(lottoJson).getList( 3 "lotto.winners.find {it.winnerId == 23}.numbers.findAll {it > 10}", 4 Integer.class);
rest-assured的JsonPath使用方法總結