2

私は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 変換が十分に賢くないのでしょうか? 正しい型への変換を保証するために型属性を使用できたようです。

4

1 に答える 1

1

問題は、JSON API が読み取ると空のセットを想定することです。

<a></a>

ライブラリの最新バージョンでは、実際には<a/>. 考えられる回避策の 1 つは (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":""}
于 2012-08-16T19:10:16.057 に答える