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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:39:36