spray-json JsString quotes on string values

json, scala, spray-json

Solution

Try this:

import spray.json._
import DefaultJsonProtocol._
val jsString = new JsString("hello")
val string = jsString.convertTo[String]

Problem

I am using json-spray. It seems that when I attempt to print a parsed JsString value, it includes book-ended quotes on the string. ``` val x1 = """ {"key1": "value1", "key2": 4} """ println(x1.asJson) println(x1.asJson.convertTo[Map[String, JsValue]]) ``` Which outputs: ``` {"key1":"value1","key2":4} Map(key1 -> "value1", key2 -> 4) ``` But that means that the string value of key1 is actually quoted since scala displays strings without their quotes. i.e. `val k = "value1"` outputs: `value1` not `"value1"`. Perhaps I am doing something wrong, but the best I could come up with to alleviate this was the following: ``` val m = x1.asJson.convertTo[Map[String, JsValue]] val z = m.map({ case(x,y) => { val ny = y.toString( x => x match { case v: JsString => v.toString().tail.init case v => v.toString() } ) (x,ny) }}) println(z) ``` Which outputs a correctly displayed string: ``` Map(key1 -> value1, key2 -> 4) ``` But this solution won't work for recursively nested JSON. Is there a better workaround?

Original source