Selenium脚本写入JSON变量问题:仅更新指定变量却覆盖全JSON
解决Selenium脚本中JSON写入覆盖问题的方案
嘿,我懂你现在的困扰——每次把gNo和pNo这两个变量写入JSON时,整个文件都被覆盖了,原有内容全没了对吧?这是因为你直接创建了新的JSONObject然后写入,完全没考虑读取原有文件的内容。下面给你一步步的解决方法:
核心思路
先读取现有JSON文件的全部内容到JSONObject中,更新你需要的两个字段,再把更新后的完整对象写回文件,这样就只会修改指定字段,其他内容都会保留。
具体代码实现
1. 读取现有JSON文件(或初始化空对象)
首先要读取已有的JSON内容,如果文件还不存在,就先创建一个空的JSONObject:
import org.json.JSONObject; import java.io.File; import java.io.IOException; import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.util.List; // 定义你的JSON文件路径 File jsonFile = new File("your/json/file/path.json"); JSONObject existingObj; try { if (jsonFile.exists()) { // 读取现有文件内容到JSONObject String jsonContent = new String(Files.readAllBytes(jsonFile.toPath()), StandardCharsets.UTF_8); existingObj = new JSONObject(jsonContent); } else { // 文件不存在时创建并初始化空对象 jsonFile.createNewFile(); existingObj = new JSONObject(); } // 你的变量获取逻辑 List<String> GCDetails = editOrderPage.getGCDetails("USD$ 50.00"); String gNo = GCDetails.get(0), pNo = GCDetails.get(1); // 2. 更新指定字段的值 existingObj.put("gNo", gNo); // 替换成你JSON文件中实际的键名 existingObj.put("pNo", pNo); // 替换成你JSON文件中实际的键名 // 3. 将更新后的内容写回文件 // toString(4)是格式化输出,让JSON更易读,4代表缩进4个空格 Files.write(jsonFile.toPath(), existingObj.toString(4).getBytes(StandardCharsets.UTF_8)); } catch (IOException e) { e.printStackTrace(); // 这里可以添加自定义的异常处理逻辑,比如日志记录 }
关键注意事项
- 异常处理:IO操作一定要包裹在
try-catch里,避免因为文件权限、路径错误等问题导致脚本崩溃。 - 键名匹配:确保
put方法里的键名和你JSON文件中实际的键名一致,不然会新增字段而不是更新原有字段。 - JSON结构适配:如果你的JSON文件是数组格式(
[])而不是对象格式({}),那需要用JSONArray来处理,逻辑类似——先读取数组,修改或添加元素,再写回去。
内容的提问来源于stack exchange,提问作者Surinder Kumar
相关产品推荐
相关产品推荐

