在scala中将字符串转换为简单的JSON

时间:2017-06-10 23:53:31

标签: json string scala

我在scala中有一个字符串,就格式而言,它是一个json,例如

{"name":"John", "surname":"Doe"}

但是当我生成这个值时,它最初是一个字符串。我需要将此字符串转换为json,但我无法更改源的输出。那么如何在Scala中进行这种转换呢? (我不能使用Play Json库。)

2 个答案:

答案 0 :(得分:3)

如果你有字符串

{"name":"John", "surname":"Doe"}

如果您想按照here保存到elastic,则应使用parseRaw代替parseFull

parseRaw会返回JSONTypeparseFull会返回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)