将 JSON 字符串映射到 JsonObject
Map JSON String to JsonObject
我有一个 JSON 字符串,例如
{
"key1": "value1",
"definition": {
// JSON content here
}
}
"definition"键在JSON中可以包含JSON数组,JSON对象。
例如,它可以有
"key2" : ""
或
"key2" : {}
或
"key2" : []
为了适应这一点,我创建了相应的 Scala class like
import com.google.gson.JsonObject
class JsonData {
var key1: String = _
var definition: JsonObject = _
}
将 JSON 字符串映射到 class JsonData 时,我在 JsonData 实例中得到 "definition" 为空。
示例代码:
import com.fasterxml.jackson.databind.{DeserializationFeature, ObjectMapper}
import com.fasterxml.jackson.module.scala.DefaultScalaModule
import com.fasterxml.jackson.module.scala.experimental.ScalaObjectMapper
import com.google.gson.JsonObject
object TestMe {
val mapper = new ObjectMapper with ScalaObjectMapper
mapper.registerModule(DefaultScalaModule)
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)
def main(args: Array[String]): Unit = {
val jsonString = "{\"key1\": \"value1\",\"definition\": {\"key2\" : \"abc\"}}"
val data = mapper.readValue[JsonData](jsonString)
println(data.definition.getAsJsonObject()) //empty
val jsonString1 = "{\"key1\": \"value1\",\"definition\": {\"key2\" : {\"key3\" : \"\"}}}"
val data1 = mapper.readValue[JsonData](jsonString1)
println(data1.definition.getAsJsonObject()) //empty
val jsonString2 = "{\"key1\": \"value1\",\"definition\": {\"key2\" : [\"a\",\"b\"]}}"
val data2 = mapper.readValue[JsonData](jsonString2)
println(data2.definition.getAsJsonObject()) //empty
}
class JsonData {
var key1: String = _
var definition: JsonObject = _
}
}
如何读取 JSON 字符串并将其映射到具有 JsonObject 属性类型之一的 class?
版本:
Scala : 2.11
Jackson-core = 2.6.x;
Gson = 2.6.x;
Jackson-databind = 2.6.x;
Jackson-module-scala = 2.6.5;
我会使用 com.fasterxml.jackson.databind.JsonNode
而不是 Google 的 Gson JsonObject
class。使用 Jackson 自己的 classes 应该会变得非常简单。
尽管您可能只是为了这种灵活性而映射到 Map[String, Any]
,除非您确实需要它仍然位于 Json.
我有一个 JSON 字符串,例如
{
"key1": "value1",
"definition": {
// JSON content here
}
}
"definition"键在JSON中可以包含JSON数组,JSON对象。 例如,它可以有
"key2" : ""
或
"key2" : {}
或
"key2" : []
为了适应这一点,我创建了相应的 Scala class like
import com.google.gson.JsonObject
class JsonData {
var key1: String = _
var definition: JsonObject = _
}
将 JSON 字符串映射到 class JsonData 时,我在 JsonData 实例中得到 "definition" 为空。
示例代码:
import com.fasterxml.jackson.databind.{DeserializationFeature, ObjectMapper}
import com.fasterxml.jackson.module.scala.DefaultScalaModule
import com.fasterxml.jackson.module.scala.experimental.ScalaObjectMapper
import com.google.gson.JsonObject
object TestMe {
val mapper = new ObjectMapper with ScalaObjectMapper
mapper.registerModule(DefaultScalaModule)
mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)
def main(args: Array[String]): Unit = {
val jsonString = "{\"key1\": \"value1\",\"definition\": {\"key2\" : \"abc\"}}"
val data = mapper.readValue[JsonData](jsonString)
println(data.definition.getAsJsonObject()) //empty
val jsonString1 = "{\"key1\": \"value1\",\"definition\": {\"key2\" : {\"key3\" : \"\"}}}"
val data1 = mapper.readValue[JsonData](jsonString1)
println(data1.definition.getAsJsonObject()) //empty
val jsonString2 = "{\"key1\": \"value1\",\"definition\": {\"key2\" : [\"a\",\"b\"]}}"
val data2 = mapper.readValue[JsonData](jsonString2)
println(data2.definition.getAsJsonObject()) //empty
}
class JsonData {
var key1: String = _
var definition: JsonObject = _
}
}
如何读取 JSON 字符串并将其映射到具有 JsonObject 属性类型之一的 class?
版本:
Scala : 2.11
Jackson-core = 2.6.x;
Gson = 2.6.x;
Jackson-databind = 2.6.x;
Jackson-module-scala = 2.6.5;
我会使用 com.fasterxml.jackson.databind.JsonNode
而不是 Google 的 Gson JsonObject
class。使用 Jackson 自己的 classes 应该会变得非常简单。
尽管您可能只是为了这种灵活性而映射到 Map[String, Any]
,除非您确实需要它仍然位于 Json.