如何在Java中将XML转换为JSON并避免解析器尝试将字符串解析为数字

如何在Java中将XML转换为JSON并避免解析器尝试将字符串解析为数字,java,json,xml,parsing,Java,Json,Xml,Parsing,我使用org.json.XML库将XML解析为json 在我的XML文档中有一个ID字段,它是用[0-9][a-z]随机生成的。它是一个字符串。一切正常,直到这个不幸的ID 123456789e1234碰巧是一个数字的科学符号。 下面是一段测试代码: public class XmlToJsonTest { public static String testXML = "<MyXML><ID>123456789e1234</ID></MyXML&

我使用org.json.XML库将XML解析为json

在我的XML文档中有一个ID字段,它是用[0-9][a-z]随机生成的。它是一个字符串。一切正常,直到这个不幸的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);
    }
}
XML lib toJson()方法首先尝试将字符串转换为整数、Long或Double,如果都不起作用,则放弃将其作为数字进行解析,并将其视为字符串。在本例中,字符串123456789e1234可作为双精度字符进行分析。稍后,当lib通过double.isInfinite()检查double是否无限时,它抛出JSONException,因为显然123456789e1234大于double的有限值标准

如何强制它根本不将值解析为数字?在这种情况下,有没有java库可以正确地将XML转换为JSON?

试试这个

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();
    }
}
}

把罐子拿来…

不确定,但这对我来说很有用:

String testXML = "<MyXML><ID>123456789e1234</ID></MyXML>";
JSONObject testJsonObject = org.json.XML.toJSONObject(testXML);
System.out.println(testJsonObject.getJSONObject("MyXML").getString("ID"));
String testXML=“123456789e1234”;
JSONObject testJsonObject=org.json.XML.toJSONObject(testXML);
System.out.println(testJsonObject.getJSONObject(“MyXML”).getString(“ID”);
有一个带有静态方法的库
U.xmlToJson(xml)
。我是项目的维护者

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);
    }
}

如果需要将XML解析为字符串,可以将第二个参数传递给
XML.toJSONObject
as
XMLParserConfiguration.KEEP_STRINGS

public static void main(String[] args) {
    System.out.println(XML.toJSONObject("<MyXML><ID>123456789e1234</ID></MyXML>", XMLParserConfiguration.KEEP_STRINGS));
}

数字解析如何与数字中的字符“e”一起工作?因为
newdouble(“123456789e1234”)
可以工作。显然,它与科学记数法配合使用。如果您使用的是
XmlToJson.toJson
?啊,XmlToJson是我的助手类,基本上在
XmlToJson.toJson()
中调用
XML.toJSONObject()
。已编辑代码。下划线-java库将其转换为字符串。如果数字为纯int/long/double-like
1234
,则这是完全无效的。您将得到
JSONObject[“ID”]
而不是字符串。
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"
}
public static void main(String[] args) {
    System.out.println(XML.toJSONObject("<MyXML><ID>123456789e1234</ID></MyXML>", XMLParserConfiguration.KEEP_STRINGS));
}
{"MyXML":{"ID":"123456789e1234"}}