Convert given XML to JSON.
Convert given XML to JSON.
Following rules are used in conversion.
Example:
scala> val xml = <users> <user> <id>1</id> <name>Harry</name> </user> <user> <id>2</id> <name>David</name> </user> </users> scala> val json = toJson(xml) scala> pretty(render(json)) { "users":{ "user":[{ "id":"1", "name":"Harry" },{ "id":"2", "name":"David" }] } }
Now, the above example has two problems. First, the id is converted to String while we might want it as an Int. This is easy to fix by mapping JString(s) to JInt(s.toInt). The second problem is more subtle. The conversion function decides to use JSON array because there's more than one user-element in XML. Therefore a structurally equivalent XML document which happens to have just one user-element will generate a JSON document without JSON array. This is rarely a desired outcome. These both problems can be fixed by following map function.
json map { case JField("id", JString(s)) => JField("id", JInt(s.toInt)) case JField("user", x: JObject) => JField("user", JArray(x :: Nil)) case x => x }
Convert given JSON to XML.
Convert given JSON to XML.
Following rules are used in conversion.
Use map
function to preprocess JSON before conversion to adjust
the end result. For instance a common conversion is to encode arrays as comma
separated Strings since XML does not have array type.
toXml(json map { case JField("nums",JArray(ns)) => JField("nums",JString(ns.map(_.values).mkString(","))) case x => x })
Functions to convert between JSON and XML.