【发布时间】:2015-12-30 04:12:42
【问题描述】:
我正在使用 org.json.XML 库将 XML 解析为 JSON。 http://www.json.org/javadoc/org/json/XML.html
在我的 XML 文档中有一个使用 [0-9][a-z] 随机生成的 ID 字段。它旨在成为一个字符串。一切正常,直到这个不幸的 ID 123456789e1234 恰好是一个数字的科学记数法。 下面是一段测试代码:
public class XmlToJsonTest {
public static String testXML = "<MyXML><ID>123456789e1234</ID></MyXML>";
@Test
public void testXMLtoJSON() throws JSONException {
JSONObject testJsonObject = XML.toJSONObject(testXML);
}
}
这是一个例外:
org.json.JSONException: JSON does not allow non-finite numbers.
XML lib toJson() 方法首先尝试将 String 转换为 Integer、Long 或 Double,如果没有成功,它会放弃将其解析为数字并将其视为 String。在这种情况下,字符串 123456789e1234 可解析为 Double。稍后当 lib 通过 Double.isInfinite() 检查 double 是否为无限时,它会抛出 JSONException,因为显然 123456789e1234 大于 Double 的有限标准。
如何强制它根本不将值解析为数字?在这种情况下,是否有任何 Java 库可以将 XML 正确转换为 JSON?
【问题讨论】:
-
如何解析号码中的字符“e”?
-
因为
new Double("123456789e1234")有效。显然它适用于科学记数法。 -
如果你使用的是XML.toJSONObject(String),那么
XmlToJson.toJson是什么? -
啊,XmlToJson 是我的助手类,它基本上在
XmlToJson.toJson()中调用XML.toJSONObject()。修改了代码。 -
Underscore-java 库会将其转换为字符串。