【问题标题】:how to convert hashMap into json object in scala?如何在scala中将hashMap转换为json对象?
【发布时间】:2014-05-19 14:31:10
【问题描述】:

我想把hashmap转成json对象,我的hashmap结构是这样的:

def res=Action{ implicit request=>
  var response=new HashMap[String,Map[String,String]]
  response=//etc .......
  .
  .
  .
  Ok(write(response))
}

它不工作。

【问题讨论】:

标签: json scala playframework-2.0 hashmap


【解决方案1】:
You can try like this....

var ls: ListBuffer[(String, Map[String, String])] = ListBuffer()
val res = list1.toList.iterator

while (res.hasNext) {

  ls += (("id", getMyMap().toMap))
}
println(ls);
ls.toList
ok(write(ls.toMap))


def getMyMap(): scala.collection.mutable.Map[String, String] = {

var m=scala.collection.mutable.Map("Address" -> "strt1", "Mobile" -> 98974)
 m
}

输出:

{"0":{"Address":"strt1","Mobile":"98974"}}

【讨论】:

    【解决方案2】:

    另一种解决方案是使用 JSON4。 [https://github.com/json4s/json4s] 作为额外的收获,它为您提供了一个很好的 DSL、使用或不使用 Jackson 的能力以及反序列化 JSON 的好方法。

    scala> import org.json4s.jackson.Serialization
    import org.json4s.jackson.Serialization
    
    scala> implicit val formats = Serialization.formats(NoTypeHints)
    formats: org.json4s.Formats{val dateFormat: org.json4s.DateFormat; val typeHints:org.json4s.TypeHints} = org.json4s.Serialization$$anon$1@f40c08d
    
    scala> Serialization.write(Map("test" -> "a", "test 2" -> 2))
    res1: String = {"test":"a","test 2":2}
    

    【讨论】:

      【解决方案3】:

      这样试试

      val data = response.map(value=> value._1 -> Json.toJson(value._2))
      
      Ok(json.toJson(data.toMap))
      

      【讨论】:

      • 它给出编译时错误............没有找到类型 java.util.map[String,String] 的 json 反序列化器尝试为此类型实现隐式写入或格式.
      • 然后尝试将地图转换为列表,如 response.map(value=> value._1 -> Json.toJson(value._2.toList))
      【解决方案4】:

      试试这个:

      Ok(Json.toJson(response.toMap))
      

      这会将您的 HashMap 转换为 Map,无需额外代码即可将其编写为 json。

      【讨论】:

      • 我试过了,但它让我无法将 com.fasterxml.jackson.databind.jsonNode 的实例写入 http 响应尝试定义可写的 [com.fasterxml.jackson.databind.jsonNode]
      • 您似乎导入了错误的包。确保您导入了play.api.libs.json.Json
      • 它不能正常工作它给我 {"keyValue":"LoadFactor:0.75"....不给键的值
      • 导入net.liftweb.json.Serialization.write,导入net.liftweb.json.DefaultFormats,导入play.api.libs.json.Json
      • 你为什么要使用java.util.Mapscala.collection.immutable.Map 是唯一可以在不实现写入或格式的情况下进行序列化的 Map
      猜你喜欢
      • 2012-08-22
      • 2014-04-04
      • 1970-01-01
      • 2014-05-23
      • 2017-08-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多