我在scala中有一个字符串,就格式而言,它是一个json,例如
{"name":"John", "surname":"Doe"}
但是当我生成这个值时,它最初是一个字符串。我需要将此字符串转换为json,但我无法更改源的输出。那么如何在Scala中进行这种转换呢? (我不能使用Play Json库。)
答案 0 :(得分:3)
如果你有字符串
{"name":"John", "surname":"Doe"}
如果您想按照here保存到elastic
,则应使用parseRaw
代替parseFull
。
parseRaw
会返回JSONType
,parseFull
会返回map
您可以执行以下操作
import scala.util.parsing.json._
val jsonString = "{\"name\":\"John\", \"surname\":\"Doe\"}"
val parsed = JSON.parseRaw(jsonString).get.toString()
然后使用jsonToEs
api作为
sc.makeRDD(Seq(parsed)).saveJsonToEs("spark/json-trips")
<强>被修改强> 正如@Aivean指出的那样,当你已经从源代码中获得json字符串时,你就不需要转换为json了,你可以这样做
if jsonString is {"name":"John", "surname":"Doe"}
sc.makeRDD(Seq(jsonString)).saveJsonToEs("spark/json-trips")
答案 1 :(得分:1)
您可以使用scala.util.parsing.json
将字符串格式的JSON转换为JSON(基本上是HashMap
数据结构),
例如
scala> import scala.util.parsing.json._
import scala.util.parsing.json._
scala> val json = JSON.parseFull("""{"name":"John", "surname":"Doe"}""")
json: Option[Any] = Some(Map(name -> John, surname -> Doe))
导航json格式,
scala> json match { case Some(jsonMap : Map[String, Any]) => println(jsonMap("name")) case _ => println("json is empty") }
John
嵌套json示例,
scala> val userJsonString = """{"name":"John", "address": { "perm" : "abc", "temp" : "zyx" }}"""
userJsonString: String = {"name":"John", "address": { "perm" : "abc", "temp" : "zyx" }}
scala> val json = JSON.parseFull(userJsonString)
json: Option[Any] = Some(Map(name -> John, address -> Map(perm -> abc, temp -> zyx)))
scala> json.map(_.asInstanceOf[Map[String, Any]]("address")).map(_.asInstanceOf[Map[String, String]]("perm"))
res7: Option[String] = Some(abc)