【问题标题】:Creating JSON from mapFields in Scala using Jackson library使用 Jackson 库从 Scala 中的 mapFields 创建 JSON
【发布时间】:2018-08-15 18:02:43
【问题描述】:

查询结果

            1->map["id"->"1","name"->"x1",categery->"A","value"->"Dummy1"]  

            2->map["id"->"2","name"->"x2",categery->"A","value"->"Dummy2"]

            3->map["id"->"3","name"->"x3",categery->"B","value"->"Dummy3"]
            4->map["id"->"4","name"->"x4",categery->"B","value"->"Dummy4"]
            5->map["id"->"5","name"->"x5",categery->"B","value"->"Dummy5"]
            6->map["id"->"6","name"->"x6",categery->"B","value"->"Dummy6"]

我正在尝试使用 scala 和 jackson 库从这些地图字段创建一个 json 文件

输出的 Json 应该是这样的

{"Result":
    "A":
        {"x1":"Dummy1",
         "x2":"Dummy2"}
    "B":
        {"x1":"Dummy3",
         "x1":"Dummy4",
         "x1":"Dummy5",
         "x1":"Dummy6"
        }
}

到目前为止我尝试的是

root = mapper.createObjectNode
child = mapper.createObjectNode
categoryA = mapper.createObjectNode

for((row,i)<-query_results.get.zipWithIndex)
val mapfields = row._2
id = mapfields.get("id")
if(id==1)
{
val x1 = mapfields.get("value")
categoryA.put("x1",x1)
}
if(id==2)
{
val x2 = mapfields.get("value")
categoryA.put("x2",x2)
child.set("A",categoryA)
}
root.set("Result",child)

这是可行的,但我有 30 行,如果我遵循这种方法,我需要编写 30 个 if 子句。我希望有人能指导我找到更简单的解决方案。

【问题讨论】:

    标签: json scala jackson


    【解决方案1】:

    使用https://github.com/json4s/json4s ("org.json4s" %% "json4s-jackson" % "3.6.0"):

    import org.json4s.jackson.JsonMethods._
    import org.json4s.JsonDSL.WithBigDecimal._
    
    object CreatingJsonFromMapfieldsInScala_5186406 extends App {
      val input = Map(
        1 -> Map("id" -> "1", "name" -> "x1", "categery" -> "A", "value" -> "Dummy1"),
        2 -> Map("id" -> "2", "name" -> "x2", "categery" -> "A", "value" -> "Dummy2"),
        3 -> Map("id" -> "3", "name" -> "x3", "categery" -> "B", "value" -> "Dummy3"),
        4 -> Map("id" -> "4", "name" -> "x4", "categery" -> "B", "value" -> "Dummy4"),
        5 -> Map("id" -> "5", "name" -> "x5", "categery" -> "B", "value" -> "Dummy5"),
        6 -> Map("id" -> "6", "name" -> "x6", "categery" -> "B", "value" -> "Dummy6")
      ).values
    
      val byCategory = input.groupBy(_("categery"))
      val projected = byCategory.mapValues(_.map(row => row("name") -> row("value")))
      println(projected)
      println(compact(render("result" -> projected)))
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-11
      • 1970-01-01
      • 2021-06-11
      • 2016-10-02
      • 2019-01-20
      相关资源
      最近更新 更多