求助:无法通过JSONObject修改JSON内transactionReferenceNumber属性值
问题原因
你遇到的核心问题是:request.eventDetails.message对应的是JSON格式的字符串,而非嵌套的JSON对象。你之前的代码只是把它转成了普通字符串,自然没法直接操作里面的transactionReferenceNumber属性。
解决方案
需要先把message字符串解析成独立的JSONObject,修改属性后再转回字符串,更新回主JSON结构中。以下是完整可行的代码示例:
import org.json.JSONObject; import java.nio.file.Files; import java.nio.file.Paths; import java.nio.file.StandardOpenOption; public class JsonModifyExample { public static void main(String[] args) { try { // 1. 读取JSON文件并解析为主JSONObject String filepath = System.getProperty("user.dir") + "/src/test/resources/Json_Files/Payment_Events_Api_PayLoad.json"; String jsonContents = new String(Files.readAllBytes(Paths.get(filepath))); JSONObject mainJsonObject = new JSONObject(jsonContents); // 2. 获取eventDetails节点 JSONObject eventDetails = mainJsonObject.getJSONObject("request") .getJSONObject("eventDetails"); // 3. 取出message字符串并解析为JSONObject String messageStr = eventDetails.getString("message"); JSONObject messageJsonObject = new JSONObject(messageStr); // 4. 修改transactionReferenceNumber属性 messageJsonObject.put("transactionReferenceNumber", "NEW_REFERENCE_1234"); // 5. 将修改后的message对象转回字符串,更新回主JSON eventDetails.put("message", messageJsonObject.toString()); // 6. (可选)将修改后的JSON写回原文件 Files.write(Paths.get(filepath), mainJsonObject.toString(4).getBytes(), StandardOpenOption.TRUNCATE_EXISTING); System.out.println("JSON修改完成,已更新文件"); } catch (Exception e) { e.printStackTrace(); } } }
关键说明
- 二次解析:必须把
message字符串转成JSONObject才能操作内部属性,这是解决问题的核心步骤 - 更新主JSON:修改后的
message对象要转回字符串,再通过eventDetails.put()更新回主结构,否则主JSON不会生效 - 格式化输出:
mainJsonObject.toString(4)会生成带4空格缩进的格式化JSON,方便查看;如果不需要格式化,直接用toString()即可
内容的提问来源于stack exchange,提问作者Balaji Singh .Y
相关产品推荐
相关产品推荐

