标签: json4s

如何在使用Json4s序列化期间重命名字段?

如何在json4s中轻松重命名字段名?从他们的文档,我已经尝试了以下代码片段,但它似乎没有重命名该serial字段id.

case class Person(serial: Int, firstName: String)

val rename = FieldSerializer[Person](renameTo("serial", "id"))

implicit val format = DefaultFormats + rename

write(Person(1, "Guest")) //returns {"serial":1,"firstName":"Guest"}
Run Code Online (Sandbox Code Playgroud)

使用Jackson库,通过声明注释很容易.但我正在寻找一个纯粹的scala库/解决方案.是否有更好的库或方法用于scala中的对象到json序列化,并且易于字段重命名?

json scala json4s

7
推荐指数
1
解决办法
3221
查看次数

基于请求内容类型的不同路由Spray Routing 1.2.1

我想支持提交到同一网址的几种不同的内容类型:

例如:

application/x-www-form-urlencoded,multipart/form-data,application/json

我想做的事情如下:

post {
  contentType(`application/x-www-form-urlencoded`) | 
  contentType(`multipart/form-data`) {
     // user POSTed a form
     entity(as[MyCaseClass]) { data =>
        complete { data.result }
     }
  } ~ contentType(`application/json`) {
     // user POSTed a JSON object
     entity(as[MyCaseClass]) { data =>
        complete { data.result }
     }
  }
}
Run Code Online (Sandbox Code Playgroud)

我认为可能有一些方法可以使用自定义编组和解组,但我只需要在我的服务中的一两个位置,这看起来很简单.有人可以帮忙吗?

scala spray json4s spray-dsl

7
推荐指数
1
解决办法
1495
查看次数

使用json4s序列化和反序列化scala枚举或案例对象

假设我有一个枚举或密封的案例对象组,如下所示:

  sealed abstract class Status
  case object Complete extends Status
  case object Failed extends Status
  case object Pending extends Status
  case object Unknown extends Status
Run Code Online (Sandbox Code Playgroud)

要么

  object Status extends Enumeration {
    val Complete, Failed, Pending, Unknown = Value
  }
Run Code Online (Sandbox Code Playgroud)

为这些创建json格式的最简单方法是什么,以便我可以非常容易地(以编程方式)生成json格式,以便在自定义JsonFormat工厂方法中使用,例如以下内容,适用于所有正常的案例类,字符串,集合等. ,但产生{}{"name": null}上述两种类型的枚举?:

import org.json4s.DefaultFormats
import org.json4s.jackson.JsonMethods.parse
import org.json4s.jackson.Serialization
import org.json4s.jvalue2extractable
import org.json4s.string2JsonInput

trait JsonFormat[T] {
  def read(json: String): T
  def write(t: T): String
}

object JsonFormat {

  implicit lazy val formats = DefaultFormats

  def …
Run Code Online (Sandbox Code Playgroud)

scala json4s

7
推荐指数
1
解决办法
8251
查看次数

spark 2.1.1:解析的JSON值与类构造函数不匹配

spark 2.1.1和他有一个奇怪的问题json4s.jackson.

我升级了我的流媒体项目spark 1.5.1.现在当我在IDE中执行代码时,一切正常.

但之后assembly和代码独立执行spark-submit

我收到以下错误

Caused by: org.json4s.package$MappingException: Parsed JSON values do not match with class constructor
args=
arg types=
constructor=  
Run Code Online (Sandbox Code Playgroud)

我的Environemnt:

  • 火花= 2.1.1
  • 阶= 2.11,
  • json4s杰克逊= 3.2.11

以前有人遇到过同样的问题吗?如果是的话,你是怎么解决的?

非常感谢.

json jackson json4s apache-spark spark-streaming

7
推荐指数
1
解决办法
714
查看次数

Json4s自定义序列化程序,带有无序字段

在json4s自述文件https://github.com/json4s/json4s#serializing-non-supported-types上给出的示例中,匹配仅在字段为order {"start":0,"end":0}时有效.如果交换了开始和结束字段,则匹配不起作用.无论如何都要编写下面的大小写匹配,以便JSON字段排序无关紧要?

case JObject(JField("start", JInt(s)) :: JField("end", JInt(e)) :: Nil)
Run Code Online (Sandbox Code Playgroud)

scala json4s

6
推荐指数
1
解决办法
916
查看次数

在Scala中解析和操纵json

我有一个从我正在使用的REST服务返回的JSON.

{
    "id": "6804",
    "signatories": [
        {
            "id": "12125",
            "fields": [
                {
                    "type": "standard",
                    "name": "fstname",
                    "value": "John"
                },
                {
                    "type": "standard",
                    "name": "sndname",
                    "value": "Doe"
                },
                {
                    "type": "standard",
                    "name": "email",
                    "value": "john.doe@somwhere.com"
                },
                {
                    "type": "standard",
                    "name": "sigco",
                    "value": "Company"
                }
            ]
        }
    ]
}
Run Code Online (Sandbox Code Playgroud)

目前我正在研究一种用json4s解析它的方法,迭代"fields"数组,以便能够改变那里不同对象的属性"value".到目前为止,我已经尝试了一些json库,最终得到了json4s.

Json4s允许我将json解析为JObject,我可以尝试从中提取"fields"数组.

    import org.json4s._
    import org.json4s.native.JsonMethods._

    // parse to JObject
    val data = parse(json)

    // extract the fields into a map
    val fields = data \ "signatories" \ "fields"

    // parse …
Run Code Online (Sandbox Code Playgroud)

json scala json4s

6
推荐指数
1
解决办法
7336
查看次数

如何迭代org.json4s.JsonAST.JValue这是一个JSON对象数组,分别处理Scala中的每个对象?

我有一个示例数组:

[{
    "abc":"1",
    "de":"1"
},
{
    "fgh":"2",
    "ij":"4"
}]
Run Code Online (Sandbox Code Playgroud)

这是一个org.json4s.JsonAST.JValue.

如何迭代数组中的每个对象,分别对每个对象进行操作?

json scala json4s

6
推荐指数
2
解决办法
1万
查看次数

JSON4S类型提示不起作用

以下测试片段

implicit val formats = DefaultFormats + FullTypeHints(Contacts.classList)

val serialized = Serialization.write(List(Mail(field = "random@mail.com", note = "Random note.")))
println(serialized)

Serialization.read[List[Contact[_]]](serialized).isInstanceOf[List[Mail]] should be (true)
Run Code Online (Sandbox Code Playgroud)

失败了

Can't find constructor for Contact[Object]
org.json4s.package$MappingException: Can't find constructor for Contact[Object]
    at org.json4s.reflect.package$.fail(package.scala:95)
    at org.json4s.reflect.ScalaSigReader$$anonfun$5.apply(ScalaSigReader.scala:21)
    at org.json4s.reflect.ScalaSigReader$$anonfun$5.apply(ScalaSigReader.scala:21)
    at scala.Option.getOrElse(Option.scala:121)
    at org.json4s.reflect.ScalaSigReader$.readConstructor(ScalaSigReader.scala:21)
    at org.json4s.reflect.Reflector$ClassDescriptorBuilder.ctorParamType(Reflector.scala:93)
    at org.json4s.reflect.Reflector$ClassDescriptorBuilder$$anonfun$createConstructorDescriptors$3$$anonfun$15.apply(Reflector.scala:156)
    at org.json4s.reflect.Reflector$ClassDescriptorBuilder$$anonfun$createConstructorDescriptors$3$$anonfun$15.apply(Reflector.scala:142)
    at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:234)
    at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:234)
    at scala.collection.mutable.ResizableArray$class.foreach(ResizableArray.scala:59)
    at scala.collection.mutable.ArrayBuffer.foreach(ArrayBuffer.scala:48)
    at scala.collection.TraversableLike$class.map(TraversableLike.scala:234)
    at scala.collection.AbstractTraversable.map(Traversable.scala:104)
    at org.json4s.reflect.Reflector$ClassDescriptorBuilder$$anonfun$createConstructorDescriptors$3.apply(Reflector.scala:142)
    at org.json4s.reflect.Reflector$ClassDescriptorBuilder$$anonfun$createConstructorDescriptors$3.apply(Reflector.scala:136)
    at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:234)
    at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:234)
    at scala.collection.mutable.ArraySeq.foreach(ArraySeq.scala:74)
    at scala.collection.TraversableLike$class.map(TraversableLike.scala:234)
    at scala.collection.AbstractTraversable.map(Traversable.scala:104)
    at org.json4s.reflect.Reflector$ClassDescriptorBuilder.createConstructorDescriptors(Reflector.scala:136)
    at …
Run Code Online (Sandbox Code Playgroud)

serialization json scala json4s hive-serde

6
推荐指数
1
解决办法
567
查看次数

Json4s 不序列化 Java 类

我有一些 scala 代码,需要能够使用 Json4s 序列化/反序列化一些 Java 类。

我正在使用"org.json4s" %% "json4s-ext" % "4.0.5""org.json4s" %% "json4s-jackson" % "4.0.5"虽然我也尝试过3.6.7版本。

模型代码(Java):

import com.fasterxml.jackson.annotation.JsonProperty;

public class Blah {
    @JsonProperty("what")
    public final String what;

    public Blah() {
        this(null);
    }
    public Blah(String what) {
        this.what = what;
    }
}
Run Code Online (Sandbox Code Playgroud)

序列化(Scala):

import org.json4s.DefaultFormats
import org.json4s.jackson.Serialization

println(Serialization.write(new Blah("helloooo!!!!"))(DefaultFormats))
Run Code Online (Sandbox Code Playgroud)

它只打印出:{}

我知道我可以为每个 Java 类编写一个CustomSerializer,但我有很多 Java 类,并且真的想避免这样做。关于如何实现这项工作有什么想法吗?

java scala json4s

6
推荐指数
1
解决办法
427
查看次数

使用 json4s 时如何设置 Jackson 解析器功能?

我在尝试使用 json4s 解析 JSON 时收到以下错误:

Non-standard token 'NaN': enable JsonParser.Feature.ALLOW_NON_NUMERIC_NUMBERS to allow
Run Code Online (Sandbox Code Playgroud)

如何启用此功能?

scala jackson json4s

5
推荐指数
1
解决办法
4516
查看次数