如何仅使用STRING类型将XML转换为Json

时间:2017-09-21 09:40:51

标签: java json xml

我使用JSONObject的toJSONObject()将XML转换为JSON。但是,对我来说存在恼人的转换问题。

例如,我的原始XML看起来像这样:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?><testData><Timestamp>20170907005718936</Timestamp><Detail><Item1>02907005718520</Item1><Item2>02907425118520</Item2><Item3>20170921133613</Item3></Detail></testData>

然后我执行以下操作将它们转换为JSON:

String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><testData><Timestamp>20170907005718936</Timestamp><Detail><Item1>02907005718520</Item1><Item2>02907425118520</Item2><Item3>20170921133613</Item3></Detail></testData>";
    try {
        JSONObject xmlObj = XML.toJSONObject(xml);
        System.out.println(xmlObj.toString());
    } catch (JSONException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

转换后,我在每个代码中的数据都已损坏,因为它认为它们是NUMBERS,而不是STRING

{"testData":{"Timestamp":20170907005718936,"Detail":{"Item1":2907005718520,"Item2":2907425118520,"Item3":20170921133613}}}

如何将所有标记值仅转换为字符串类型?

3 个答案:

答案 0 :(得分:1)

试试这个,

  

JSONObject xmlObj = XML.toJSONObject(xml, true );

函数中输入XML之后的布尔值将按预期结果返回。

感谢, Morajse

答案 1 :(得分:0)

我认为这可以用: 分类:

public JSONObject() {
    this.map = new LinkedHashMap<String, Object>();
}
 
 
public JSONObject(Map<String, Object> map) {
    this.map = new LinkedHashMap<String, Object>();
    if (map != null) {
        Iterator<Entry<String, Object>> i = map.entrySet().iterator();
        while (i.hasNext()) {
            Entry<String, Object> entry = i.next();
            Object value = entry.getValue();
            if (value != null) {
                this.map.put(entry.getKey(), wrap(value));
            }
        }
    }
}

然后在你的主要:

String xml = FileUtils.readFileToString(new File("test.xml"));
System.out.println(org.json.XML.toJSONObject(xml).toString());

希望对你有所帮助! =)

答案 2 :(得分:0)

您可以尝试将每个number转换为String,例如:

String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><testData><Timestamp>20170907005718936</Timestamp><Detail><Item1>02907005718520</Item1><Item2>02907425118520</Item2><Item3>20170921133613</Item3></Detail></testData>";
xml = xml.replaceAll("(?<=\\d+)<", "\"<"); // any < preceded by digits
xml = xml.replaceAll(">(?=\\d+)", ">\""); // any > followed by digits
System.out.println(xml);

<强>输出:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?><testData><Timestamp>"20170907005718936"</Timestamp><Detail><Item1>"02907005718520"</Item1><Item2>"02907425118520"</Item2><Item3>"20170921133613"</Item3></Detail></testData>

修改

如果您的String值可以以数字开头/结尾,则可以指定您的值应被视为Number的位数的下限,例如:

xml = xml.replaceAll("(?<=\\d{5})<", "\"<"); // any < preceded by at least 5 digits
xml = xml.replaceAll(">(?=\\d{5})", ">\""); // any > followed by at least 5 digits