我有scala类,比如A类(b:Seq[字符串])
我的问题是,当我从没有字段的文本中反序列化它时,我的类包含空字段。可以强制反序列化程序填充空的?
我使用com。fasterxml。杰克逊。数据绑定。带有com的ObjectMapper。fasterxml。杰克逊。单元斯卡拉。默认Scalamodule。
编辑:我想要的解决方案是修复所有此类字段,而不显式地提及它们的完整列表。Ir更改所有声明。
我在使用jackson反序列化String数组时遇到了类似的问题,并且发现jackson显然(尚未尝试)在jackson-mode2.1.2中修复了此问题。它可能适用于Seq。https://github.com/FasterXML/jackson-module-scala/issues/48
如果使用Spray JSON,那么一个不处理缺少b字段的简单示例如下所示:
import spray.json._
case class A(b: Seq[String])
object Protocol extends DefaultJsonProtocol {
implicit def aFormat = jsonFormat1(A)
}
import Protocol._
val str1 = """{ "b" : [] }""""
val str2 = """{ "b" : ["a", "b", "c"] }""""
val str3 = """{}"""
str1.parseJson.convertTo[A]//successful
str2.parseJson.convertTo[A]//successful
str3.parseJson.convertTo[A]//Deserialization error
在Spray JSON中,这可以通过为A类编写更详细的协议格式来解决:
import spray.json._
case class A(b: Seq[String])
object Protocol extends DefaultJsonProtocol {
implicit object aFormat extends RootJsonFormat[A] {
override def write(obj: A): JsValue = JsObject("b" -> obj.b.toJson)
override def read(json: JsValue): A = json match {
//Case where the object has exactly one member, 'b'
case JsObject(map) if map.contains("b") && map.size == 1 => A(map("b").convertTo[Seq[String]])
//Case where the object has no members
case JsObject(map) if map.isEmpty => A(Seq())
//Any other json value, which cannot be converted to an instance of A
case _ => deserializationError("Malformed")
}
}
}
import Protocol._
val str1 = """{ "b" : [] }""""
val str2 = """{ "b" : ["a", "b", "c"] }""""
val str3 = """{}"""
str1.parseJson.convertTo[A]//successful
str2.parseJson.convertTo[A]//successful
str3.parseJson.convertTo[A]//successful
不幸的是,杰克逊目前不支持这一点。
您可以在此处查看相关的GitHub票证:https://github.com/FasterXML/jackson-databind/issues/347
您最好的选择是将null
映射到类构造函数或访问器方法中的空Seq
:
class A(_b: Seq[String]) {
val b = _b match {
case null => Nil
case bs => bs
}
}
(另见https://stackoverflow.com/a/20655330/8261其他选项)
问题内容: 我有一个Ruby数组,如何在Rails 3.0中将其呈现为JSON视图? 我的控制器方法是 问题答案:
问题内容: 如何在Android中以这种格式创建JSON:由于我将传递的API将解析JsonArray,然后解析该对象。还是只传递一个json对象就可以了吗?因为我只需要在每个服务调用中插入1个事务即可。 我所知道的只是JSONObject。像这个。 有任何想法吗。谢谢 问题答案: 使用以下代码:
数组是值的有序集合,JSON 中的数组与 JavaScript 中的数组相似,同样需要使用方括号 定义,方括号中为数组中的若干值,值可以是 JSON 中支持的任意类型(例如字符串、数字、布尔值、对象、数组等),每个值之间使用逗号 分隔开,具体语法格式如下: [value_1, value_2, value_3, ..., value_N] 下面来看一个 JSON 数组的示例: 通过上面的示例可以看
数组作为 JSON 对象[ "Google", "Runoob", "Taobao" ] JSON 数组在中括号中书写。 JSON 中数组值必须是合法的 JSON 数据类型(字符串, 数字, 对象, 数组, 布尔值或 null)。 JavaScript 中,数组值可以是以上的 JSON 数据类型,也可以是 JavaScript 的表达式,包括函数,日期,及 undefined。 JSON 对象中的
本文向大家介绍PHP实现数组转JSon和JSon转数组的方法示例,包括了PHP实现数组转JSon和JSon转数组的方法示例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了PHP实现数组转JSon和JSon转数组的方法。分享给大家供大家参考,具体如下: 数组转JSon数据: 运行结果: Array ( [menber] => Array ( [
JSON数组是值(value)的有序集合。一个数组以“[”(左中括号)开始,“]”(右中括号)结束。值之间使用“,”(逗号)分隔。如图 1‑5所示: 图1-5 JSON数组 JSON 数组: JSON 数组在中括号中书写。 JSON 中数组值必须是合法的 JSON 数据类型(字符串, 数值, 对象, 数组, 布尔值或 null),也可以是 JavaScript 的表达式,包括函数、日期、undef