【问题标题】:Converting JSON to XML gives invalid XML将 JSON 转换为 XML 会产生无效的 XML
【发布时间】:2018-07-24 19:32:09
【问题描述】:

我正在尝试将有效的 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"}"

【问题讨论】:

  • XML.toString(json); 这是什么API?
  • 我猜 OP 正在使用 org.json.XML
  • @bhspencer 很有可能。但是JSONParser 来自哪里?该问题可能与滥用所用 API 有关。 OP 应该清楚它的依赖关系。
  • @davidxxx 我已添加到我的依赖项中。

标签: java json xml


【解决方案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,因为您可以使用org.json 尤其是org.json.JSONObject 创建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"}"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-01
    • 2016-05-26
    • 1970-01-01
    • 2013-02-05
    • 2014-02-18
    • 2013-05-09
    相关资源
    最近更新 更多