Considérez une carte simple ci-dessous :

val myTable:Map[String,Any] = Map(
"Table1" -> Array(
    Map("date" -> "2019"),
    Map("FilePath" -> "C:/Test")
))

J'essaie de l'écrire dans un fichier JSON en utilisant les commandes ci-dessous :

import java.io.{File,FileWriter,Writer}
import org.apache.spark.sql.SparkSession
import com.google.gson.Gson
import com.google.gson.GsonBuilder

val gson: Gson = new GsonBuilder().setPrettyPrinting().serializeNulls().create()
val json =  gson.toJson(myTable)
val w: Writer = new FileWriter("C:/Test/output.json")
w.write(json)
w.close()

Ce que j'obtiens dans le fichier json est le suivant :

{
"key1": "Table1",
"value1": [
{
  "key1": "date",
  "value1": "2019"
},
{
  "key1": "FilePath",
  "value1": "C:/Test"
}
]
}

Je me demande s'il est possible d'exclure les mots "key1", "value1" et d'imprimer à la place leurs valeurs réelles dans le fichier (voir la structure ci-dessous):

{
"Table1": {
"date": "2019",
"FilePath": "C:/Test"
}
}

Si c'est pertinent, j'utilise maven pas sbt.

0
Mahmoud 8 oct. 2019 à 02:50

1 réponse

Meilleure réponse

Essaye ça:

import play.api.libs.json.Json

object JsonToString extends App {
  val myTable = Map(
    "Table1" -> Array(
      Map("date" -> "2019"),
      Map("FilePath" -> "C:/Test")
))

val jsonObject = Json.toJson(myTable)
println(jsonObject)

}

Il doit supprimer les mots key1, value1 et utiliser à la place leur valeur réelle. Vous trouverez ci-dessous la liste des dépendances maven que vous devez ajouter.

<dependency>
    <groupId>com.typesafe.play</groupId>
    <artifactId>play-json_2.10</artifactId>
    <version>2.4.0-M1</version>
</dependency>

<dependency>
    <groupId>com.fasterxml.jackson.core</groupId>
    <artifactId>jackson-annotations</artifactId>
    <version>2.10.0</version>
</dependency>
2
Madstuffs 8 oct. 2019 à 05:33