【问题标题】:Scala - Convert Map to Json avoiding key/value keywordsScala - 将 Map 转换为 Json 避免键/值关键字
【发布时间】:2020-02-05 06:35:59
【问题描述】:

考虑下面的简单地图:

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。

【问题讨论】:

    标签: json scala gson filewriter file-writing


    【解决方案1】:

    试试这个:

    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>
    

    【讨论】:

    • 感谢疯狂!我是 scala 的新手,如果您能帮助我解决我在尝试实施您的解决方案时遇到的以下问题,我将不胜感激:1)对于“import play.api.libs.json.Json”,它说“无法解析符号播放” ";为什么? 2)对于“val jsonObject = Json.toJson(myTable)”,它说“无法解析符号 Json”并要求我添加“import org.apache.avro.data.Json”或“import org.json4s.jackson”。 {Json, Serialization}" 3) 添加后,现在不喜欢".toJason";为什么? 4)你使用了“println”,如果我需要将它写入文件,我应该像上面提到的那样简单地使用FileWriter吗?
    • 你需要添加一个maven依赖。我会在答案中添加它。
    • 啊,你打败了我!打算建议使用 Play JSON。 @Mahmoud, println 只是为了举例打印出 JSON。如果你真的想用 JSON 做一些事情(比如使用 FileWriter),是的,你会替换这一行。
    • 例如,如果你想让它变得漂亮,你可以这样做:scastie.scala-lang.org/872ipw3QToKvQJIuwbAdeQ
    • 谢谢詹姆斯!有了您的额外建议,它现在可以正常工作了!
    猜你喜欢
    • 1970-01-01
    • 2020-07-11
    • 1970-01-01
    • 2021-08-28
    • 1970-01-01
    • 1970-01-01
    • 2020-08-30
    • 2015-04-23
    • 1970-01-01
    相关资源
    最近更新 更多