ADA*_*H K 5 java json scala intellij-idea apache-spark
我有一个文本文件,其中包含一行
球员={“梅西”:{“详细信息”:{“进球”:500},“国家”:“阿根廷”},“内马尔”:{“俱乐部”:[“桑托斯”,“巴塞罗那足球俱乐部”,“巴黎圣德文"], "国家":"巴西"}}
现在我使用正则表达式来提取
{“梅西”:{“详细信息”:{“进球”:500},“国家”:“阿根廷”},“内马尔”:{“俱乐部”:[“桑托斯”,“巴塞罗那足球俱乐部”,“巴黎圣德意志人” "],"国家":"巴西"}}
从文本文件并将其传递给接受值作为String的 case 类。
我正在使用这个案例类制作一个数据框。
在我的情况下,每一行的内容可能与 JSON 字符串不同。所以我正在寻找一个通用的解决方案来将任何复杂的 Json 字符串转换为 Map 值。
检查dataframe.printSchema 时,我将玩家列作为字符串类型获取。但我需要它作为一个 Map 类型,它包含一个 Key 和一个值作为 Struct 类型。我尝试了此链接中提到的方法
当我使用这种方式时,出现错误
"org.json4s.package$MappingException: 不知道如何将 JObject(List((Details,JObject(List((Goals,JString(500))))), (Country,JString(Argentina)))) 转换成类java.lang.String "
我使用了以下解决方案
在 Scala 中将 JSON 字符串转换为 JSON 对象
但这些对我也不起作用。
这是我的案例课
case class caseClass (
Players :String = ""
)
Run Code Online (Sandbox Code Playgroud)
我正在使用用户定义的函数提取 json 字符串。
简单地说,我的要求是我有一个复杂的 Json 字符串,其中包含键和值,如结构、列表等。
所以我想将字符串转换为其相应的 JSON,该 JSON 拥有与其内容相关的正确模式。
敬请期待有价值的解决方案。
如果你也可以接受JsValueas value 而不是String它看起来更简单一些:
import play.api.libs.json._
case class CaseClass (
Players :Option[JsValue]
)
object CaseClass {
implicit val jsonFormat = Json.format[CaseClass ]
}
Run Code Online (Sandbox Code Playgroud)
我看到你的 Json 有一些问题 - 所以你需要有类似的东西:
val json = Json.parse("""{
"Players":{
"Messi":{"Details":{"Goals":500},"Country":"Argentina"},
"Neymar":{"Clubs":["Santos", "FC barcelona", "Paris saint German"], "Country":"Brazil"}
}
}"""
)
Run Code Online (Sandbox Code Playgroud)
要从中获取字符串,您可以使用:
json.validate[CaseClass] match {
case JsSuccess(cc, _) => cc.Players.toString
case JsError(errors) => // handle errors
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1758 次 |
| 最近记录: |