You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 17:17:44