Posted at

scalaでxmlをjsonへ変換する


問題

xmlでとってきたRSSをjsonに変換して扱いを楽にしたい。


解決

scalaライブラリjson4sを使うと、かなり簡単にxmlをJson形式へ変換できます。

準備は、build.sbtへjson4s-xmlを追加するだけ。

libraryDependencies += "org.json4s" %% "json4s-xml" % "3.6.3"

xmlをjsonへ変換します。

正確には、scalaのxmlを扱う標準クラスであるscala.xml.Elem型からJValueへの変換をします。


main.scala

package json

import org.json4s.JValue
import org.json4s.Xml.toJson

import scala.xml.Elem

object ScalaXml extends App {
val xml: Elem =
<body>
<h1>title</h1>
<div>
<p>content</p>
</div>
</body>

val json: JValue = toJson(xml)

println(json) // => JObject(List((body,JObject(List((h1,JString(title)), (div,JObject(List((p,JString(content))))))))))
}


JValue形式をjsonの文字列にしたり、値の取り出しなどしたい場合は、Json4sをご参照ください。

json4s/json4s: A single AST to be used by other scala json libraries


余談

今回この問題に取り組んで、初めてscalaのxmlリテラルについて知りました。JSXと同じようにコード内にhtmlを直書きできます。

intellijのReformat Codeできれいにインデントしてくれて見やすく便利ですね。