java - 如何在 Scala 中将复杂的 JSON 字符串转换为 MAP

标签 java json scala apache-spark intellij-idea

我有一个文本文件,其中包含这样一行

players={"Messi":{"Details":{"Goals":500},"Country":"Argentina"},"Neymar":{"Clubs":["Santos", "FC barcelona", "Paris saint German"], "Country":"巴西"}}

现在我使用正则表达式来提取

{"Messi":{"Details":{"Goals":500},"Country":"Argentina"},"Neymar":{"Clubs":["Santos", "FC barcelona"", "Paris saint German"],"Country":"巴西"}}

从文本文件中将其传递给一个 case 类,该类接受 String 的值。

我正在使用这个案例类制作一个 Dataframe。

在我的例子中,JSON 字符串中的每一行的内容都可能不同。所以我正在寻找一个通用的解决方案来将任何复杂的 Json 字符串转换为 Map 值。

检查 dataframe.printSchema 时,我将玩家列作为字符串类型获取。 但我需要它作为一个 Map 类型,它拥有一个 Key 和 value 作为一个 Struct 类型。 我尝试了此链接中提到的方法

How can I convert a json string to a scala map?

我这样用的时候报错

"org.json4s.package$MappingException: 不知道如何转换 JObject(List((Details,JObject(List((Goals,JString(500))))), (Country,JString(Argentina )))) 进入类 java.lang.String "

我使用了以下解决方案

Converting JSON string to a JSON object in Scala

但这些对我也不起作用。

这是我的案例课

case class caseClass (
                       Players :String = ""
                     )

我正在使用用户定义的函数提取 json 字符串。

简单地说,我的要求是我有一个复杂的 Json 字符串,其中包含结构、列表等键和值。

所以我想将字符串转换为其对应的 JSON,该 JSON 包含关于其内容的正确模式。

敬请期待有值(value)的解决方案。

最佳答案

如果您还可以使用 JsValue 而不是 String 作为值,它看起来更简单一些:

import play.api.libs.json._

case class CaseClass (
           Players :Option[JsValue]
         )

object CaseClass {

  implicit val jsonFormat = Json.format[CaseClass ]
}

我看到你的 Json 有一些问题 - 所以你需要有类似的东西:

val json = Json.parse("""{
  "Players":{
     "Messi":{"Details":{"Goals":500},"Country":"Argentina"},
     "Neymar":{"Clubs":["Santos", "FC barcelona", "Paris saint German"], "Country":"Brazil"}
  }
}"""
  )

要从中获取字符串,您可以使用:

  json.validate[CaseClass] match {
    case JsSuccess(cc, _) => cc.Players.toString
    case JsError(errors) => // handle errors
  }  

关于java - 如何在 Scala 中将复杂的 JSON 字符串转换为 MAP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55512020/

相关文章:

java - 任务未正确执行代码

json - logstash_forwarder已连接到Lostash服务器IP,但从未收到事件

javascript - 如何摆脱 Object #<Object> has no method 'push' 错误?

scala - 如何在 Spark 上执行大型计算

java - ScheduledExecutorService 超时后中断

Java:如果使用Pattern.quote(),是否保证在编译期间不会抛出PatternSyntaxException?

java - 如何读取 Data Matrix 条形码

javascript - 使用 JavaScript 将 JSON 文件转换为 CSV

java - 如何避免spark scala中的循环依赖异常并使代码以循环依赖运行

scala - 使用模式匹配实现递归函数