Java修改JSON文件timestamp_ms为UTC时间并回写的实现方案咨询
解决方法
你当前的代码只差3个核心逻辑:字段替换、修改同步到原JSON结构、写入本地文件,以下是修正后的完整可运行代码:
import org.json.JSONArray; import org.json.JSONObject; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Paths; import java.text.SimpleDateFormat; import java.util.Date; import java.util.TimeZone; public class JsonMain { public static void main(String[] args) throws IOException { String inputPath = "chatMessage.json"; // 若要直接覆盖原文件,可将outputPath改为和inputPath一致 String outputPath = "chatMessage_utc.json"; // 读取原始JSON文件 String jsonSource = new String(Files.readAllBytes(Paths.get(inputPath)), "UTF-8"); JSONObject rootObj = new JSONObject(jsonSource); JSONArray messagesArr = rootObj.getJSONArray("messages"); // 显式指定UTC日期输出格式,可按需调整格式字符串 SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS"); sdf.setTimeZone(TimeZone.getTimeZone("UTC")); // 遍历修改每个消息的timestamp_ms字段 for (int i = 0; i < messagesArr.length(); i++) { JSONObject messageObj = messagesArr.getJSONObject(i); long timestamp = messageObj.getLong("timestamp_ms"); String utcTime = sdf.format(new Date(timestamp)); // 直接覆盖原字段值 messageObj.put("timestamp_ms", utcTime); } // 写入输出文件,toString(4)代表缩进4空格生成格式化易读JSON,不需要格式化传0即可 Files.write(Paths.get(outputPath), rootObj.toString(4).getBytes("UTF-8")); System.out.println("转换完成,结果已写入:" + outputPath); } }
如果你项目用Maven管理依赖,确保pom.xml中已有org.json的依赖配置:
<dependency> <groupId>org.json</groupId> <artifactId>json</artifactId> <version>20230227</version> </dependency>
关键说明
- org.json的JSONObject、JSONArray都是引用传递,拿到数组下标对应的消息对象修改后,修改会自动同步到上层的JSON结构,不需要额外手动回写
- 可以按需调整SimpleDateFormat的格式字符串,比如需要ISO 8601标准格式可以改为
"yyyy-MM-dd'T'HH:mm:ss.SSS'Z'" - Java 8及以上版本推荐用线程安全的Instant类代替SimpleDateFormat,代码更简洁:
// 替换SimpleDateFormat相关逻辑即可 String utcTime = Instant.ofEpochMilli(timestamp).toString(); // 输出示例:2021-05-10T15:37:35.808Z
内容的提问来源于stack exchange,提问作者Bruno
相关产品推荐
相关产品推荐

