我在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转换不够智能?似乎可以使用类型属性来保证转换回正确的类型。
答案 0 :(得分:1)
问题是JSON API在读取后会假定为空集:
<a></a>
在该库的最新版本中,它实际返回<a/>
。一种可能的解决方法(如果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":""}