2013年10月3日木曜日

Androidでxmlをjsonに変換(JSONICを利用)

レスポンスの生xmlをjsonに変換したい

hoge.xmlなどのxmlファイルをjsonへ変換する方法は簡単に見つかったのですが、
通信結果などのレスポンスの生xml(表現あってんのか?)jsonに変換する方法があまり引っかからなかったのでメモ。
AmazonのProduct Advertising APIのレスポンスがxmlだったので使うことになりました。


JSONICをインポート

こちらからダウンロードできます。
ダウンロードしたjarファイルは、libフォルダに入れてください。

JSONICのメソッドは
JSON.encode(Document docment)
を利用します。



サンプルコード

staticメソッドですのでこのままコピペで動きます。
引数や返り値は適宜変更してください。

 public static JSONArray responseToJson(HttpResponse res) {
  if (res == null){
   return null;
  }
  HttpEntity httpEntity = res.getEntity();
  JSONArray jsonArray = null;

  try {
   String xml = EntityUtils.toString(httpEntity, "UTF-8");
   Log.d("convert", "xml= "+ xml);
   DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance();
   DocumentBuilder docBuilder = docFactory.newDocumentBuilder();
   Document doc = docBuilder.parse(new InputSource(new ByteArrayInputStream(xml.getBytes("UTF-8"))));
   String json = JSON.encode(doc);
   Log.d("convert", "json= "+ json);
   jsonArray = new JSONArray(json);
  } catch (JSONException e) {
   e.printStackTrace();
  } catch (ParseException e) {
   e.printStackTrace();
  } catch (IOException e) {
   e.printStackTrace();
  } catch (ParserConfigurationException e) {
   e.printStackTrace();
  } catch (SAXException e) {
   e.printStackTrace();
  }
  return jsonArray;
 }



参考

JSONIC - simple json encoder/decoder for java 
StackOverFlow java.net.MalformedURLException: no protocol