Question: So I have a Map in Scala like this:

```
val m = Map[String, String](
    "a" -> "theA",
    "b" -> "theB",
    "c" -> "theC",
    "d" -> "theD",
    "e" -> "theE"
)

```

and I want to serialize this structure into a JSON string using lift-json.

Do any of you know how to do this?

Answer: 
You can roll your own pretty easily (yay, no dependencies). This one does basic handling of types and will do recursion unlike `JSONObject` that was mentioned:

```
import scala.collection.mutable.ListBuffer

object JsonConverter {
  def toJson(o: Any) : String = {
    var json = new ListBuffer[String]()
    o match {
      case m: Map[_,_] => {
        for ( (k,v) <- m ) {
          var key = escape(k.asInstanceOf[String])
          v match {
            case a: Map[_,_] => json += "\"" + key + "\":" + toJson(a)
            case a: List[_] => json += "\"" + key + "\":" + toJson(a)
            case a: Int => json += "\"" + key + "\":" + a
            case a: Boolean => json += "\"" + key + "\":" + a
            case a: String => json += "\"" + key + "\":\"" + escape(a) + "\""
            case _ => ;
          }
        }
      }
      case m: List[_] => {
        var list = new ListBuffer[String]()
        for ( el <- m ) {
          el match {
            case a: Map[_,_] => list += toJson(a)
            case a: List[_] => list += toJson(a)
            case a: Int => list += a.toString()
            case a: Boolean => list += a.toString()
            case a: String => list += "\"" + escape(a) + "\""
            case _ => ;
          }
        }
        return "[" + list.mkString(",") + "]"
      }
      case _ => ;
    }
    return "{" + json.mkString(",") + "}"
  }

  private def escape(s: String) : String = {
    return s.replaceAll("\"" , "\\\\\"");
  }
}

```

You can see it in action like

```
println(JsonConverter.toJson(
    Map("a"-> 1,
        "b" -> Map(
            "nes\"ted" -> "yeah{\"some\":true"),
            "c" -> List(
                1,
                2,
                "3",
                List(
                    true,
                    false,
                    true,
                    Map(
                        "1"->"two",
                        "3"->"four"
                    )
                )
            )
        )
    )
)

{"a":1,"b":{"nes\"ted":"yeah{\"some\":true"},"c":[1,2,"3",[true,false,true,{"1":"two","3":"four"}]]}

```

(It's part of a Coinbase GDAX library I've written, see [util.scala](https://github.com/jar-o/gdax-scala/blob/master/src/main/scala/GDAX/util.scala "util.scala"))
Supplementing the answer by @Raja.

For those nested object, I locally modify the class to have my wanted `toString()` like this way:

`case class MList[T]() extends MutableList[T] {
 override def toString() = "[" + this.toList.mkString(",") + "]"
}`

Then inside the Map object, I use this `MList` instead of the standard `List`. That way, my `map` object prints out fine by calling `JSONObject(map).toString()`.