Tengo un archivo de texto que contiene una línea como
jugadores = { "Messi": { "Detalles": { "Objetivos": 500}, "País": "Argentina"}, "Neymar": { "clubes": [ "Santos", "FC Barcelona", "París saint German "], "País":" Brasil "}}
Ahora estoy acostumbrado una expresión regular para el extracto
{ "Messi": { "Detalles": { "Objetivos": 500}, "País": "Argentina"}, "Neymar": { "clubes": [ "Santos", "FC Barcelona", "Paris Saint German "]," País ":" Brasil "}}
Del archivo de texto y pasarlo a una clase de caso que acepta el valor como una cadena .
y yo estoy haciendo una trama de datos usando esta clase caso.
En mi caso, cada línea puede ser diferente en los contenidos con JSON en el String.So Busco a una solución general para convertir cualquier cadena JSON complejo de Valores de mapa.
Al comprobar dataframe.printSchema , estoy consiguiendo la columna de jugadores como un tipo de cadena. Pero necesito que sea como un tipo de mapa que contiene una clave y un valor como un tipo de estructura. Yo método probado hace referencia en este enlace
¿Cómo puedo convertir una cadena JSON a un mapa Scala?
cuando utilicé esta manera, ha obtenido un error
"Org.json4s.package $ MappingException: no sabe cómo convertir jobject (lista ((Detalles, jobject (Lista ((Objetivos, jstring (500))))), (país, jstring (Argentina)))) en la clase java.lang.String "
y I utilizados siguiendo soluciones
La conversión de cadena JSON en un objeto JSON en Scala
Pero estos también no funcionó para mí.
Esta es mi clase de caso
case class caseClass (
Players :String = ""
)
Estoy extrayendo la cadena JSON utilizando una función definida por el usuario.
Simplemente mi requisito es que tengo un complejo de cadena JSON que contiene las claves y valores como la estructura, etc .. lista
por lo que quiero hacer la cadena a su correspondiente JSON que contiene un esquema adecuado con respecto a su contenido.
Amablemente esperando soluciones valiosas.
Si también puede vivir con JsValue
como valor en lugar de String
lo que parece un poco más simple:
import play.api.libs.json._
case class CaseClass (
Players :Option[JsValue]
)
object CaseClass {
implicit val jsonFormat = Json.format[CaseClass ]
}
Vi algunos problemas con su JSON - por lo que tendría que tener algo como:
val json = Json.parse("""{
"Players":{
"Messi":{"Details":{"Goals":500},"Country":"Argentina"},
"Neymar":{"Clubs":["Santos", "FC barcelona", "Paris saint German"], "Country":"Brazil"}
}
}"""
)
Para obtener una cadena de ello se puede utilizar:
json.validate[CaseClass] match {
case JsSuccess(cc, _) => cc.Players.toString
case JsError(errors) => // handle errors
}