2011-10-16 13 views
20

Teniendo un valor de jString : JString sosteniendo una cadena "abc" dentro obtengo "JString(abc)" : String si llamo al jString.toString. ¿Cómo obtengo "abc" : String en su lugar?Cómo convertir un valor de JSON JString a una cadena ordinaria en Lift?

+1

que he encontrado la solución a usar 'jString.values: string' pero siento incierto si es correcta - ¿Por qué se llama 'values' (no es' value') si solo hay 'String'? – Ivan

Respuesta

16

Para extraer un valor de JValue se puede utilizar cualquier método descrito aquí: What is the most straightforward way to parse JSON in Scala?

Por ejemplo:

json.extract[String] 

puede utilizar la función 'render' para convertir cualquier JValue a formato imprimible. Entonces, ya sea 'bonita' o 'compacta' la convertirá en una Cadena.

compact(render(json)) 

o

pretty(render(json)) 
+0

No quiero renderizar JSON. Quiero lo contrario: extraer un valor de cadena de una propiedad de un objeto serializado en JSON y ya he aislado ese único campo en una JString separada, que no contiene nada más que el valor que necesito. – Ivan

7
val jstring=JString("abc") 
implicit val formats = net.liftweb.json.DefaultFormats 
System.out.println(jstring.extract[String]) 
6

Creo que la mejor manera es usar partido:

val x = ... (whatever, maybe it's a JString) 

x match { 
    case JString(s) => do something with s 
    case _   => oops, something went wrong 
} 
1

Esta fue preguntado hace un tiempo, pero quería un sencillo de una línea ayudante que obtendría mi cadena en el contexto de una expresión, así que escribí esta pequeña cosa dentro de un objeto llamado Get:

object Get { 
    def string(value: JValue): String = {                            
     val JString(result) = value                        
     result                                
    } 
    ... 
    } 

esta manera que sólo puede hacer, por ejemplo, val = miCadena Get.string (jsonStringValue)

Cuestiones relacionadas