2008年1月24日木曜日

JSON-libでXMLのJSON化

スズキです。

近頃AmazonのAPIで遊んでます。
http://suz-lab.blogspot.com/2008/01/amazon-associates-web-service.html

残念なことに、Amazonからのレスポンスは、
僕の苦手なXMLです。一刻も早くJSONに変換したいところです。

今までは、該当XMLをJavascript側で、
XML.ObjTreeを用いてJSONに変換していましたが、
http://www.kawa.net/works/js/xml/objtree.html
今回は、JSON-libを用いてJava側で変換してみました。
http://json-lib.sourceforge.net/

依存関係も含めて、上記サイトから、
必要なjarを取得&配置すればよいのですが、
XMLまわりの処理では、XOMも必要になります。
http://www.xom.nu/
(サイトのどこかには書いてあるのかなー?見つけられなかった…)

以上のjarが準備できたら、下記のように利用することができます。
--------
String xml ="XMLを文字列かしたもの";
XMLSerializer serializer = new XMLSerializer();
JSON json = serializer.read(xml);
json.toString(); // Stringで出力
--------

いい感じに変換してくれます
ただ、配列まわりの処理が融通ききません。
つまり、

<root>
  <sub>aaa</sub>
  <sub>bbb</sub>
</root>

{root: ["aaa", "bbb"]}

<root>
  <sub>aaa</sub>
</root>

{root: "aaa"}

となってしまいます。
{root: ["aaa"]}
となってほしいところですが、
強制的にそうするすべもなさそうです。
(XML.ObjTreeのforce_arrayのようなもの)

なので、今回は、Javascript側で、
object instanceof Array
で条件分岐して対応しました。

こう考えると、XML.ObjTreeの方が使いやすく感じてしまいます。
xmlObjectifier(jQuery)はどうなんだろう?
http://www.terracoder.com/
XPathを使うべきか?
http://coderepos.org/share/wiki/JavaScript-XPath
難しく考えすぎ?

この辺、まだまだ揺れてます。

--

http://suz-lab.blogspot.com/

0 コメント: