我正在编写一个程序来转换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>
时间戳的值已更改。
但是如果JSON内容将纪元时间戳作为字符串,例如
String data = "{\"result\":\"pass\", \"timestamp\":"1497870880.0396869183"}";
然后结果事件字符串给出正确的结果
<result>pass</result><timestamp>1497870880.0396869183</timestamp>
任何人都可以解释为什么会这样吗? JSON XML API对LONG值不友好吗? 注意:输入JSON内容将包含具有字符串值和纪元时间的多个属性。
答案 0 :(得分:0)
JSONObject将时间戳解析为Double,您看到的科学记数法1.497870880039687E9
只是Double的toString()的结果。
https://docs.oracle.com/javase/7/docs/api/java/lang/Double.html#toString(double)
如果m小于10 ^ 3或大于或等于10 ^ 7,则表示为所谓的“计算机化科学记数法”。令n为唯一的整数,使得10 ^n≤m<1。 10 ^ N + 1;然后将a设为m和10 ^ n的数学上精确的商,使1≤a<1。 10.然后将幅度表示为a的整数部分,作为单个十进制数字,后跟“。”。 ('\ u002E'),后跟表示a的小数部分的十进制数字,后跟字母'E'('\ u0045'),后跟n表示十进制整数,由Integer方法生成。的toString(INT)。
如果你想保留原始格式,你需要用引号括住data
中的值,以便JSONObject认为它是一个字符串。
String data = "{\"result\":\"pass\", \"timestamp\":\"1497870880.0396869183\"}";