如何使用Jayway JsonPath获取无引号的NumberList值?
问题:Jayway JsonPath获取NumberList值时去除双引号
原始JSON结构
{ "MyData": { "Type": "ABC", "Id": "567", "Number": "888" }, "RefId": "9999", "DataValues": [ { "NumberList": [ "7777777" ], "NumberId": "888888888", "Phone": "0000000" } ] }
当前Jayway代码及问题
使用以下代码解析时,输出结果带双引号:
String jsonResponse = "{ \"MyData\": {\"Type\": \"ABC\",\"Id\": \"567\",\"Number\": \"888\"},\"RefId\": \"9999\",\"DataValues\": [{\"NumberList\": [\"7777777\"],\"NumberId\": \"888888888\",\"Phone\": \"0000000\" }]}"; List<Map<String, Object>> responseValue = com.jayway.jsonpath.JsonPath.parse(jsonResponse).read("NumberList"); String number = responseValue.get(0).get("NumberList").toString().replace("[", "").replace("]", ""); System.out.println("number --> " + number);
输出:number --> "7777777",需要获取不带双引号的7777777,且不想使用RestAssured JsonPath。
解决方法
方法1:使用精准的JsonPath表达式直接定位元素
直接通过表达式定位到NumberList的第一个元素,获取原始字符串值,无需后续处理:
String jsonResponse = "{ \"MyData\": {\"Type\": \"ABC\",\"Id\": \"567\",\"Number\": \"888\"},\"RefId\": \"9999\",\"DataValues\": [{\"NumberList\": [\"7777777\"],\"NumberId\": \"888888888\",\"Phone\": \"0000000\" }]}"; String number = com.jayway.jsonpath.JsonPath.parse(jsonResponse).read("$.DataValues[0].NumberList[0]"); System.out.println("number --> " + number);
输出:number --> 7777777
方法2:正确处理返回的集合类型
修正类型转换,将NumberList强转为List<String>,直接取第一个元素:
String jsonResponse = "{ \"MyData\": {\"Type\": \"ABC\",\"Id\": \"567\",\"Number\": \"888\"},\"RefId\": \"9999\",\"DataValues\": [{\"NumberList\": [\"7777777\"],\"NumberId\": \"888888888\",\"Phone\": \"0000000\" }]}"; List<Map<String, Object>> dataValues = com.jayway.jsonpath.JsonPath.parse(jsonResponse).read("$.DataValues"); List<String> numberList = (List<String>) dataValues.get(0).get("NumberList"); String number = numberList.get(0); System.out.println("number --> " + number);
输出:number --> 7777777
方法3:字符串处理移除引号(不推荐)
如果必须沿用原有表达式,可额外移除字符串中的双引号,但该方法依赖格式,易出错:
String jsonResponse = "{ \"MyData\": {\"Type\": \"ABC\",\"Id\": \"567\",\"Number\": \"888\"},\"RefId\": \"9999\",\"DataValues\": [{\"NumberList\": [\"7777777\"],\"NumberId\": \"888888888\",\"Phone\": \"0000000\" }]}"; List<Map<String, Object>> responseValue = com.jayway.jsonpath.JsonPath.parse(jsonResponse).read("NumberList"); String number = responseValue.get(0).get("NumberList").toString().replace("[", "").replace("]", "").replace("\"", ""); System.out.println("number --> " + number);
输出:number --> 7777777
内容的提问来源于stack exchange,提问作者VinodKhade
相关产品推荐
相关产品推荐

