Scala - конвертировать карту в Json, избегая ключевых слов / значений - PullRequest
0 голосов
/ 08 октября 2019

Рассмотрим простую карту ниже:

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

Я пытаюсь записать ее в файл JSON с помощью следующих команд:

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()

То, что я получаю в файле json:следующее:

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

Мне интересно, можно ли исключить слова "key1", "value1" и вместо этого вывести их фактические значения в файл (см. структуру ниже):

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

Если это уместно, я использую Maven, а не SBT.

1 Ответ

2 голосов
/ 08 октября 2019

Попробуйте это:

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)

}

Он должен удалить слова key1, value1 и вместо этого использовать их фактическое значение. Ниже приведен список зависимостей maven, которые нужно добавить.

<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>
...