将JSON转换为XML会得到无效的XML

时间:2018-07-24 19:32:09

标签: java json xml

我正在尝试将有效的JSON文件转换为XML。

InputStream is = new FileInputStream(file); 
BufferedReader buf = new BufferedReader(new InputStreamReader(is)); 
String line = buf.readLine(); StringBuilder sb = new StringBuilder(); 
while(line != null){ 
    sb.append(line); 
    line = buf.readLine(); 
} 

//form the string
String jsonStr = sb.toString();

//save to xml
JSONParser parser = new JSONParser();
JSONObject json = (JSONObject) parser.parse(jsonStr);
String xml = XML.toString(json);

这是我的依赖项:

import org.json.XML;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;

输入JSON如下:

{"created":"2016-12-22T10:46:40.584Z","createdBy":"ish"}

输出XML如下:

"{"createdBy":"ish","created":"2016-12-22T10:46:40.584Z"}"

1 个答案:

答案 0 :(得分:1)

您的问题是您混合使用两个API:json-simpleorg.json
在这里:

String xml = XML.toString(json);

您将org.json.simple.JSONObject对象传递给the org.json.XML.toString(Object)方法。
您要传递的是org.json.JSONObject
实际上,您不需要使用json-simple,因为您可以使用JSONObject创建一个org.json,尤其是创建一个org.json.JSONObject。最终,这是一件非常好的事情,因为XML.toString()可以通过实例得到预期的结果。
因此,更改您的代码,例如:

JSONObject json = new JSONObject(jsonStr);
String xml = XML.toString(json);

您可以选择添加封闭元素的标签名称:

String xml = XML.toString(json, "foo");

请注意,XML.toString(Object)并不是设计良好的API所必需的。
它接受Object作为参数,因此依靠instanceof进行适当的处​​理。
仅当参数类型属于某些特定类型时才完成到XML的映射:org.json.JSONObjectorg.json.JSONArray,Java array
如果不是这种情况,那么就可以做一件事情:转义特殊字符,例如"。由于org.json.simple.JSONObject不属于预期类型,因此保留"参数的JSONObject并通过转义将其转换为"。而您得到的结果很奇怪:

"{"createdBy":"ish","created":"2016-12-22T10:46:40.584Z"}"