我使用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}}}
如何将所有标记值仅转换为字符串类型?
答案 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