Java 纪元时间的JSONObject xml转换错误

Java 纪元时间的JSONObject xml转换错误,java,json,xml,epoch,Java,Json,Xml,Epoch,我正在编写一个程序,将包含epoch-time属性的JSON内容转换为XML格式,并将其存储在字符串中 下面是代码 String data = "{\"result\":\"pass\", \"timestamp\":1497870880.0396869183}"; JSONObject json = new JSONObject(data); //the json object contains proper epoch value after this line String event =

我正在编写一个程序,将包含epoch-time属性的JSON内容转换为XML格式,并将其存储在字符串中

下面是代码

String data = "{\"result\":\"pass\", \"timestamp\":1497870880.0396869183}";
JSONObject json = new JSONObject(data); //the json object contains proper epoch value after this line
String event = XML.toString(json); 
当我打印字符串事件的内容时,我得到

<result>pass</result><timestamp>1.497870880039687E9</timestamp>
然后,生成的事件字符串给出正确的结果

<result>pass</result><timestamp>1497870880.0396869183</timestamp>
pass1497870880.0396869183
谁能解释一下为什么会这样?JSON XML API对长值不友好吗?
注意:输入的JSON内容将包含多个具有字符串值和历元时间的属性。

JSONObject将时间戳解析为双精度,您看到的科学符号
1.497870880039687E9
只是双精度的toString()的结果

如果m小于10^3或大于或等于10^7,则用所谓的“计算机科学记数法”表示。设n为唯一整数,使10^n≤ m<10^n+1;然后设a为m和10^n的数学精确商,因此1≤ a<10。然后,将幅度表示为a的整数部分,表示为单个十进制数字,后跟“.”(“\u002E”),后跟表示a的小数部分的十进制数字,后跟字母“E”(“\u0045”),后跟表示为十进制整数的n,如integer.toString(int)方法生成的

如果要保持原始格式,需要将
数据中的值用引号括起来,以便JSONObject将其视为字符串

String data = "{\"result\":\"pass\", \"timestamp\":\"1497870880.0396869183\"}";

它并没有完全改变价值。它正在变为科学符号在XML之前打印JSONObject。问题可能是json libraryjson对象与json内容一样具有正确、准确的历元值和准确的内容。调用toString()后出现问题。感谢您的响应。您能否在XML.toString()调用中提及避免这种情况发生的任何方法?@DeepakSelvakumar除了将值作为字符串传递外,没有其他方法。由于在JSONObject中转换为Double,时间戳失去了不可逆的精度。
String data = "{\"result\":\"pass\", \"timestamp\":\"1497870880.0396869183\"}";