How to convert a JSON JString value to an ordinary String in Lift?
Asked Answered
M

4

21

Having a jString : JString value holding an "abc" string inside I get "JString(abc)" : String if I call jString.toString. How do I get "abc" : String instead?

Magnify answered 16/10, 2011 at 2:1 Comment(1)
I've found the solution to use jString.values : String but I feel uncertain if it's correct - why is it called values (not a value) if there's just a String?Magnify
W
19

To extract a value from JValue you can use any method described here: What is the most straightforward way to parse JSON in Scala?

For instance:

json.extract[String]

You can use 'render' function to convert any JValue to printable format. Then either 'pretty' or 'compact' will convert that to a String.

compact(render(json))

or

pretty(render(json))
Wyeth answered 16/10, 2011 at 9:6 Comment(1)
I don't want to render JSON. I want the opposite - to extract a string value of a property of an object serialized in JSON and I've already isolated that only field into a separate JString, containing nothing but the value I need.Magnify
C
7
val jstring=JString("abc")
implicit val formats = net.liftweb.json.DefaultFormats 
System.out.println(jstring.extract[String])
Centrifugate answered 27/3, 2012 at 0:8 Comment(0)
A
7

I believe the best way is to use match:

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

x match {
  case JString(s) => do something with s
  case _          => oops, something went wrong
}
Acacia answered 12/6, 2012 at 0:34 Comment(0)
I
1

This was asked a while ago, but I wanted a simple one-line helper that would get my string for me in the context of an expression, so I wrote this little thing inside of an object called Get:

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

This way I can just do, e.g., val myString = Get.string(jsonStringValue)

Interaction answered 10/3, 2015 at 22:29 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.