如何在Java中读取JSON文件并修改其中指定变量(如username)
如何修改JSON中的username字段值
你可以用Java常用的JSON处理库(Jackson或Gson)来解析读取到的JSON字符串,修改指定字段后再转为字符串作为请求体。下面是两种可行的实现方式:
方式一:使用Jackson库
先确保项目引入了Jackson核心依赖(Maven/Gradle项目可在配置文件中添加对应依赖),然后修改你的方法如下:
@When("^I send share privately api$") public void sharePrivately() throws IOException { // 读取JSON文件为字符串 String body = new String(Files.readAllBytes(Paths.get("src/test/resources/config/environments/sharePrivately.json"))); // 使用Jackson解析并修改字段 ObjectMapper objectMapper = new ObjectMapper(); ObjectNode rootNode = objectMapper.readValue(body, ObjectNode.class); // 获取invitees数组的第一个元素,修改username字段 ArrayNode inviteesNode = rootNode.get("invitees").deepCopy(); ObjectNode firstInvitee = inviteesNode.get(0).deepCopy(); firstInvitee.put("username", "new-test-user@example.com"); // 替换为你需要的新值 inviteesNode.set(0, firstInvitee); rootNode.set("invitees", inviteesNode); // 转回修改后的JSON字符串 String modifiedBody = objectMapper.writeValueAsString(rootNode); RequestSpecification header = rh.share(payload.userAuth()); response = header.body(modifiedBody) .when() .post("/shares") .then() .assertThat() .extract() .response(); System.out.println(response.getStatusCode()); }
方式二:使用Gson库
如果更习惯用Gson,先确保项目引入Gson依赖,再修改方法:
@When("^I send share privately api$") public void sharePrivately() throws IOException { String body = new String(Files.readAllBytes(Paths.get("src/test/resources/config/environments/sharePrivately.json"))); // 使用Gson解析并修改字段 Gson gson = new Gson(); JsonObject rootObject = gson.fromJson(body, JsonObject.class); // 获取invitees数组 JsonArray inviteesArray = rootObject.getAsJsonArray("invitees"); // 修改第一个元素的username JsonObject firstInvitee = inviteesArray.get(0).getAsJsonObject(); firstInvitee.addProperty("username", "new-test-user@example.com"); // 设置新的用户名 // 转回修改后的JSON字符串 String modifiedBody = gson.toJson(rootObject); RequestSpecification header = rh.share(payload.userAuth()); response = header.body(modifiedBody) .when() .post("/shares") .then() .assertThat() .extract() .response(); System.out.println(response.getStatusCode()); }
两种方式核心逻辑一致:把JSON字符串转成可操作的JSON节点/对象,定位到invitees数组的第一个元素,修改username字段后再转回字符串,最后用修改后的字符串作为请求体发送接口请求。
内容的提问来源于stack exchange,提问作者CvMr
相关产品推荐
相关产品推荐

