如何使用 json4s 将对象序列化为 AST?

2023-11-24

我正在编写一个客户序列化程序。在那个序列化器中,我想以某种方式说:“这件事你已经知道如何序列化”。

我目前的方法如下:

    import org.json4s.native.Serialization._
    import org.json4s.JsonDSL.WithBigDecimal._

    object WindowSerializer extends CustomSerializer[Window](format =>
      ( [omitted],
        {
          case Window(frame, size) =>

            ( "size" -> size ) ~
            ( "frame" -> parse(write(frame)) )
        }))

That parse(write(frame))事情既丑陋又低效。如何解决这个问题?


您可以致电Extraction.decompose(a: Any)(implicit formats: Formats): JValue这会产生一个JValue使用运行时反射从某个值。

import org.json4s._
import org.json4s.jackson.JsonMethods._
import org.json4s.JsonDSL._
import java.util.UUID

case class Thing(name: String)
case class Box(id: String, thing: Thing)

class BoxSerializer extends CustomSerializer[Box](format => ({
  case jv: JValue =>
    val id = (jv \ "id").extract[String]
    val thing = (jv \ "thing").extract[Thing]
    Box(id, thing)
}, {
  case b: Box =>
    ("token" -> UUID.randomUUID().toString()) ~
      ("id" -> box.id) ~
      ("thing" -> Extraction.decompose(box.thing))
}))

implicit val formats = DefaultFormats + new BoxSerializer

val box = Box("1000", Thing("a thing"))

// decompose the value to JSON 
val json = Extraction.decompose(box)
println(pretty(json))
//  {
//    "token" : "d9bd49dc-11b4-4380-ab10-f6df005a384c",
//    "id" : "1000",
//    "thing" : {
//      "name" : "a thing"
//    }
//  }

// and read a value of type Box back from the JSON
println(json.extract[Box])
// Box(1000,Thing(a thing))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 json4s 将对象序列化为 AST? 的相关文章

随机推荐

  • 使用 XPath/应用 XSL 转换遍历任意 C# 对象图

    我一直在寻找一个允许我将任意 C 对象传递到 XSL 转换的组件 最简单的方法是使用 XmlSerializer 序列化对象图 但是 如果您有一个很大的对象图 这可能会导致性能问题 诸如循环引用 延迟加载 代理等问题可能会进一步使情况变得更
  • SQL 拆分函数和排序问题?

    我有以下内容Split功能 ALTER FUNCTION dbo Split String varchar 8000 Delimiter char 1 returns temptable TABLE items varchar 8000 a
  • 如何在运行时更改 SolidColorBrush 资源的颜色?

    如何在运行时更改另一个资源字典中使用的资源字典中的颜色 这是我的设置 颜色 xaml
  • 我应该直接使用 python 魔法方法吗?

    我听一个人说你不应该直接使用魔法方法 我认为在某些用例中我必须直接使用魔术方法 那么经验丰富的开发人员 我应该直接使用 python 魔法方法吗 我的目的是展示一些好处not直接使用魔法方法 1 可读性 使用内置函数 例如len 比相关的魔
  • pecl 在生产服务器上安装扩展的问题

    所以我在本地安装了pecl oauth模块 一切都运行良好 然后我尝试对生产服务器执行此操作 但遇到了一些问题 如果我说 sudo pecl install oauth 我会收到此错误 No releases available for p
  • 如何关闭 Spring 3 调试日志记录?

    我想关闭 Spring 3 1 的 log4j 日志记录 同时为我自己的代码保留调试状态 我尝试将这一行粘贴到我的 log4j properties 中 log4j category org springframework WARN 要得到
  • SignalR 2.0.0 beta2 IJsonSerializer 扩展性

    我想添加一些自定义序列化逻辑 以便转换后的 json 包含驼峰式大小写属性 出于这个原因 我尝试用我在此链接中找到的一个替换默认的 IJsonSerializer https github com SignalR SignalR issue
  • 获取“django.core.exceptions.ImproperlyConfigured:需要 GEOS,但尚未检测到”。虽然安装了GEOS

    我在跑姜戈 1 8 and Python 3 4 on Ubuntu 14 04 LTS 就在最近 我的 Django 应用程序报告了这一点GEOS不存在 GEOS已安装并且libgeos c so是它应该在的地方 usr lib 我的代码
  • 使用 xstream 自定义 java 集合的序列化

    我有一个需要序列化为 XML 的对象 其中包含以下字段 List
  • 类型初始值设定项(静态构造函数)异常处理

    我正在用 C 编写 WCF 服务 最初 我的实现有一个静态构造函数来执行一些一次性初始化 但正在完成的某些初始化可能 暂时 失败 看来静态构造函数只被调用一次 即使第一次 失败 尝试抛出异常 任何后续实例化我的类的尝试都将立即失败 并显示T
  • 如何在div内使用带有文本的剪辑路径?

    我尝试了以下方法 http codepen io anon pen YXePBY div lorem ipsum dolor sit amet lorem ipsum dolor sit amet lorem ipsum dolor sit
  • JavaScript 判断对象是否为数组的方法[重复]

    这个问题在这里已经有答案了 判断一个对象是否是数组的 正确 方法是什么 函数 isArray o 最好的办法 function isArray obj return Object prototype toString call obj ob
  • 有没有一种方法可以在不按回车键的情况下获取用户输入? [复制]

    这个问题在这里已经有答案了 我正在编写一个控制台游戏 吃豆人 我想知道如何在不按回车键的情况下获得用户输入 我在互联网上浏览了一下 发现了一些关于 getch 但它显然不再是最新的 并且没有已知的头文件来声明它 除非有人构建自己的头文件 而
  • 没有元素的索引数组

    我有一个向量 a Vector 1 4 1 2 3 4 我想将它索引到所有元素but第三个得到 1 2 4 in R你可以做a 3 你在做什么Julia 最终我想循环遍历所有元素并将它们与其余元素进行比较 也许这是相关的 该用例是常见的用例
  • 使 Python 单元测试显示 AssertionError 但不显示 Traceback

    我在这里查看了其他相关问题 但没有找到我的答案 我想简化 Python 2 7 单元测试的输出 试sys tracebacklimit 0不工作 这是我的代码片段 真实的代码会生成很多类似的测试 usr bin python E impor
  • 切换画布上下文

    假设我有一个 WebGL 画布 通过调用getContext experimental webgl 有没有办法稍后切换上下文以使用 2d one 这样做的目的是在渲染过程中发生错误时显示类似调试 BSOD 的信息 如果不可能 那么 我可以在
  • BSP 地下城生成的简单示例

    我最初是想追随这个算法用 C 创建一个简单的 Roguelike 地下城 但我想我太愚蠢了 因为我的结果总是一团糟 然后 我切换到我自己的算法 该算法产生的结果不是很好 但半可识别为地下城 有没有人有任何以 BSP 方式执行此操作的示例 如
  • 如何从 Java 6 中的字节数组中获取 MIME 类型?

    我一直在试图弄清楚如何获取MIME类型来自 Java 6 中的字节数组 但不幸的是还无法获取 MIME 类型 有人可以帮我摆脱这个困境吗 您可以使用MimetypesFileTypeMapJava 6 提供的类 该类专门用于获取MIME类型
  • 在 Pandas 中重新采样,同时保持价值关联

    从这样的事情开始 from pandas import DataFrame time np array 2015 08 01T00 00 00 2015 08 01T12 00 00 dtype datetime64 ns heat ind
  • 如何使用 json4s 将对象序列化为 AST?

    我正在编写一个客户序列化程序 在那个序列化器中 我想以某种方式说 这件事你已经知道如何序列化 我目前的方法如下 import org json4s native Serialization import org json4s JsonDSL