2011-10-16 9 views
20

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?

+1

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

risposta

16

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)) 
+0

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

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

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 
} 
1

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)