【问题标题】:org.json.XML conversion json to xml to json failsorg.json.XML 将 json 转换为 xml 到 json 失败
【发布时间】:2012-08-12 21:41:15
【问题描述】:

我在 scala 中工作,但可以接受 java 解决方案。

我一直在使用 org.json 将我的 json api 转换为 xml,因此一个奇怪的客户端(基于 VB4 并且不愿意更改)可以在 xml 中使用我的 api。

简单的 json 到 xml 转换工作正常。问题是我可能需要能够往返它并且 org.json 似乎不能正确地来回转换。

例如

{
    "a" : ""
}

转换为:

<a></a>

当我把它转换回来时,我得到:

{
    "a" : { }
}

所以 org.json 将空字符串转换为空标签,将空标签转换为空对象。我的代码如下:

object XmlSerializer {
  def toXml(json:String) = {
    val jsonObj = new JSONObject(json)
    val xmlString = XML.toString(jsonObj)

    xmlString
  }

  def fromXml(xml:String) = {
    val jsonObj = XML.toJSONObject(xml)
    val jsonString = jsonObj.toString

    jsonString
  }
}

是我遗漏了什么还是 org.json.XML 转换不够聪明?似乎可以使用类型属性来保证转换回正确的类型。

【问题讨论】:

    标签: java xml json scala


    【解决方案1】:

    问题在于 JSON API 在读取后假定为空集:

    <a></a>
    

    在最新版本的库中,它实际上返回了&lt;a/&gt;。一种可能的解决方法(如果 XML 中的空格可以)是用一个空格替换您的空值。这是一个粗略的示例:

    val INPUT_JSON = "{ \"a\" : \"\" }";
    var input = INPUT_JSON.replaceAll("\"\"", "\" \"");
    var jsonObj = new JSONObject(input);
    var xmlString = XML.toString(jsonObj);
    println("JSON to XML: " + xmlString);
    
    var xmlJSONObj = XML.toJSONObject(xmlString);
    var jsonOutputString = xmlJSONObj.toString();
    println("XML back to JSON: " + jsonOutputString);
    

    输出:

    JSON to XML: <a> </a>
    XML back to JSON: {"a":""}
    

    【讨论】:

    • 只有在假设 json { "a" : " " } 永远不会发生时才有效。此外,进一步的烦恼 { "a" : ["b"] } 将转换回 { "a" : "b" } 因为 xml b 与单个项目相同。
    猜你喜欢
    • 2015-03-08
    • 1970-01-01
    • 1970-01-01
    • 2018-04-16
    • 2013-05-09
    • 1970-01-01
    • 1970-01-01
    • 2015-05-30
    相关资源
    最近更新 更多