Avere un valore jString : JString
con una stringa "abc"
all'interno. Ricevo "JString(abc)" : String
se chiamo jString.toString
. Come posso ottenere "abc" : String
?Come convertire un valore JSON JString in una normale stringa in Lift?
risposta
Per estrarre un valore da JValue è possibile utilizzare qualsiasi metodo descritto qui: What is the most straightforward way to parse JSON in Scala?
Per esempio:
json.extract[String]
È possibile utilizzare la funzione 'rendere' di convertire qualsiasi JValue in formato stampabile. Quindi "carino" o "compatto" lo convertono in stringa.
compact(render(json))
o
pretty(render(json))
Non voglio renderizzare JSON. Voglio il contrario - per estrarre un valore stringa di una proprietà di un oggetto serializzato in JSON e ho già isolato quel solo campo in una JString separata, contenente nient'altro che il valore di cui ho bisogno. – Ivan
val jstring=JString("abc")
implicit val formats = net.liftweb.json.DefaultFormats
System.out.println(jstring.extract[String])
Credo che il modo migliore è quello di utilizzare la corrispondenza:
val x = ... (whatever, maybe it's a JString)
x match {
case JString(s) => do something with s
case _ => oops, something went wrong
}
Questo è stato chiesto qualche tempo fa, ma ho voluto un semplice-line aiutante che avrebbe ottenuto la mia stringa per me nel contesto di un'espressione, così ho scritto questa piccola cosa all'interno di un oggetto chiamato Get:
object Get {
def string(value: JValue): String = {
val JString(result) = value
result
}
...
}
In questo modo posso solo fare, ad esempio, val myString = Get.string (jsonStringValue)
ho trovato la soluzione di utilizzare 'jString.values: STRING' ma mi sento incerto se è corretto - perché si chiama 'values' (non un' valore') se c'è solo un 'String'? – Ivan