1. 程式人生 > >rest-assured的JsonPath使用方法總結

rest-assured的JsonPath使用方法總結

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使用方法總結