繁体   English   中英

如何在Scala中直接将JsonObject(gson)转换为Map Object?

[英]How to convert JsonObject (gson) to Map Object directly in Scala?

我想知道如何将JsonObject (gson) 转换为Map ,将JsonArray转换为 Scala 中的Seq 我已经检查过这个答案,它使用jackson库,但我必须先从JsonObject/Array转换为纯字符串,然后再转换为 Map,Array strong text 以下是我当前的代码:

import com.fasterxml.jackson.module.scala.DefaultScalaModule
import com.fasterxml.jackson.databind.ObjectMapper
import com.google.common.collect.ImmutableMap
import com.google.gson.{Gson, JsonObject}


object test {
  def main(args: Array[String]): Unit = {

    var json: String = "{\"itemScores\":[{\"item\":\"37064\",\"score\":0.0},{\"item\":\"1365\",\"score\":0.0}]}"
    var jsonObject = new Gson().fromJson(json, classOf[JsonObject])
    println(jsonObject) //{"itemScores":[{"item":"37064","score":0.0},{"item":"1365","score":0.0}]}
    println(jsonObject.getClass) //class com.google.gson.JsonObject

    var list1 = jsonObject.get("itemScores")
    println(list1) //[{"item":"37064","score":0.0},{"item":"1365","score":0.0}]
    println(list1.getClass) //class com.google.gson.JsonArray

    var listConvert: Seq[Map[Any, Any]] = Seq[Map[Any, Any]]() //Convert from Json Array to Scala Seq
    var mapConvert: Map[String, Seq[Any]] = Map[String, Seq[Any]]() //Convert from Json Object to Scala Map

    val mapper = new ObjectMapper()
    mapper.registerModule(DefaultScalaModule)

    mapConvert = mapper.readValue(jsonObject.toString, classOf[Map[String, Seq[Any]]])
    listConvert = mapper.readValue(list1.toString, classOf[Seq[Map[Any, Any]]])
    println(mapConvert) //Map(itemScores -> List(Map(item -> 37064, score -> 0.0), Map(item -> 1365, score -> 0.0)))
    println(listConvert) //List(Map(item -> 37064, score -> 0.0), Map(item -> 1365, score -> 0.0))
    
    for ( i <- listConvert) {
       println(i.get("item"))
       }
   }

有什么方法可以直接从 JsonObject 转换为 Map,将 JsonArray 转换为 Scala 中的 Seq? 我的最终目标是遍历JSON 对象/数组

如果您的目标是迭代未知数据,您可以直接在 GSON 对象上进行。

对于 object:

val jsonObject: JsonObject = ???

// Get the content and then iterate
val entries: Set[Entry [String, JsonElement]] = jsonObject.entrySet().asScala

// Or directly view the object as a map and then iterate
val map: Map[String, JsonElement] = jsonObject.asMap().asScala

对于数组:

val jsonArray: JsonArray = ???

// As iterator
val iterable: Iterator[JsonElement] = jsonArray.iterator()

// Or directly as a list
val list: Seq[JsonElement] = jsonArray.asList().asScala

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM