我正在使用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。在这种情况下,String 123456789e1234可解析为Double。后来当lib检查double.isInfinite()是否为double时,它会抛出JSONException,因为很明显123456789e1234大于Double的有限标准。
如何强制它不要将值解析为数字?在这种情况下,有没有正确将XML转换为JSON的java库?
答案 0 :(得分:0)
试试这个......
import org.json.me.JSONObject;
import cjm.component.cb.json.ToJSON;
public class DummyClass
{
public static void main(String[] args)
{
try
{
String xml = "<MyXML><ID>123456789e1234</ID></MyXML>";
JSONObject obj = (new ToJSON().convertToJSON(xml));
System.out.println(obj);
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
输出
-------- XML Detected --------
-------- JSON created Successfully --------
{"MyXML":{"ID":"123456789e1234"}}
为此获取Conversion Box Jar ....
答案 1 :(得分:0)
不确定,但这对我有用:
String testXML = "<MyXML><ID>123456789e1234</ID></MyXML>";
JSONObject testJsonObject = org.json.XML.toJSONObject(testXML);
System.out.println(testJsonObject.getJSONObject("MyXML").getString("ID"));
答案 2 :(得分:0)
有一个带有静态方法U.xmlToJson(xml)
的{{3}}库。我是该项目的维护者。
public class XmlToJsonTest {
public static String testXML = "<MyXML><ID>123456789e1234</ID></MyXML>";
public void main(String[] args) {
String testJson = U.xmlToJson(testXML);
System.out.println(testJson);
}
}
输出:
{
"MyXML": {
"ID": "123456789e1234"
},
"#omit-xml-declaration": "yes"
}
答案 3 :(得分:0)
如果需要将 XML 解析为 String,可以将第二个参数作为 XML.toJSONObject
传递给 XMLParserConfiguration.KEEP_STRINGS
public static void main(String[] args) {
System.out.println(XML.toJSONObject("<MyXML><ID>123456789e1234</ID></MyXML>", XMLParserConfiguration.KEEP_STRINGS));
}
输出
{"MyXML":{"ID":"123456789e1234"}}