如何在RestAssured及Java中把字符串转为JSON并提取userId?
问题解答
1. RestAssured中将String变量转换为JSON字符串
- 若你的String本身是合法JSON格式,无需额外转换为"JSON字符串"——它本身就是。如果是要将普通字符串包装成JSON结构(比如转为包含该字符串的JSON对象),可以用第三方JSON库(如org.json):
JSONObject jsonObj = new JSONObject(); jsonObj.put("key", yourStringVariable); String jsonString = jsonObj.toString(); - 要是你需要将String解析为可操作的JSON对象(方便提取字段、修改内容),用RestAssured自带的
JsonPath更便捷:JsonPath jsonPath = JsonPath.from(yourJsonString); // 后续可通过jsonPath.getXXX()方法操作JSON内容
2. 从qciResponse中提取userId
你代码里的错误在于String h = qciResponse.toJSONString;:一是String类没有toJSONString方法,二是就算有方法也需要加括号调用。以下是正确实现方式:
方法1:使用org.json库解析
先确保依赖(Maven示例)
<dependency> <groupId>org.json</groupId> <artifactId>json</artifactId> <version>20240303</version> </dependency>
修改代码
public String setRemoveLoginIdRequestBody (String awsEndPoint, String loginId) throws Exception { JSONObject joi = new JSONObject(); JSONObject requestbody = new JSONObject(); String qciResponse; if(loginId.contains("@")) { qciResponse = queryCombinedInfo(awsEndPoint,loginId,"email"); } else { qciResponse = queryCombinedInfo(awsEndPoint,loginId,"mobile"); } if (qciResponse==null || qciResponse.isEmpty()){ throw new Exception("qciResponse为空,无法提取userId"); } // 解析响应字符串为JSON对象,提取userId JSONObject qciJson = new JSONObject(qciResponse); String userId = qciJson.getString("userId"); // 注意:字段名需和实际响应中的key一致,若嵌套需用getJSONObject逐层获取 // 示例:将userId放入请求体 requestbody.put("userId", userId); return requestbody.toString(); }
方法2:使用RestAssured自带的JsonPath
更贴合RestAssured的使用场景,无需额外引入JSON库:
public String setRemoveLoginIdRequestBody (String awsEndPoint, String loginId) throws Exception { JSONObject joi = new JSONObject(); JSONObject requestbody = new JSONObject(); String qciResponse; if(loginId.contains("@")) { qciResponse = queryCombinedInfo(awsEndPoint,loginId,"email"); } else { qciResponse = queryCombinedInfo(awsEndPoint,loginId,"mobile"); } if (qciResponse==null || qciResponse.isEmpty()){ throw new Exception("qciResponse为空,无法提取userId"); } // 用RestAssured JsonPath解析并提取userId JsonPath jsonPath = JsonPath.from(qciResponse); String userId = jsonPath.getString("userId"); // 嵌套字段可写如"data.userId" // 示例:将userId放入请求体 requestbody.put("userId", userId); return requestbody.toString(); }
内容的提问来源于stack exchange,提问作者Deepali Sinha
相关产品推荐
相关产品推荐

