我正在尝试将有效的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"}"
答案 0 :(得分:1)
您的问题是您混合使用两个API:json-simple
和org.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.JSONObject
,org.json.JSONArray
,Java array
。
如果不是这种情况,那么就可以做一件事情:转义特殊字符,例如"
。由于org.json.simple.JSONObject
不属于预期类型,因此保留"
参数的JSONObject
并通过转义将其转换为"
。而您得到的结果很奇怪:
"{"createdBy":"ish","created":"2016-12-22T10:46:40.584Z"}"