问题标签 [upickle]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
82 浏览

json - Scala - Upickle/Ujson 库的自定义编码器

我正在使用 Upickle/Ujson 并想编写一个自定义编码器来掌握事情的窍门。

假设我有以下层次结构(来自这里的教程:链接

首先,这无法编译。为什么会这样?我误解了页面吗?

第二

如果我想序列化 Bar 并同时添加一个字段 "parent":"TypedFoo" 怎么办?所以酒吧看起来像:

{"parent":"TypedFoo", "$type":"package.TestDrive.TypedFoo.Bar","i":100}

我该怎么做呢?

0 投票
1 回答
52 浏览

scala - 是否可以将空序列解析为 Obj?

我正在使用 Scala 的 uPickle 来解析这个 JSON:

问题是“收入”有时是一个对象,有时是一个数组。如果它是一个空数组,这意味着该值不存在(它应该为null或不存在,但我没有生成这个json,所以我必须适应)。

是否有可能说服 uPickle 以便当它期望 aMap[_,_]并获得一个空序列时,发出一个空对象?我想像这样为上面的 json 声明一个案例类:

目前 uPickle 将中止错误“期望对象,得到序列”。

我也许可以在解析之前对 JSON 文件进行预处理,但首先我想知道 uPickle 是否能够做这样的事情?

我知道我可能可以使用自定义pickler来做到这一点,但是我有几十个结构要解析,每个结构都有相同的规则(即空对象的空序列),这样做真的很好它以更一般的方式,并自动在任何地方应用它。

0 投票
0 回答
82 浏览

scala - 标记阅读器的自定义pickler

我正在使用 uPickle 1.2.0。我有这个示例代码:

它工作正常。但是,假设我只想创建一个自定义选择器,为andTypeB保留默认选择器。这在 uPickle 中可行吗?我正在尝试使用传统方法,该方法适用于简单(未键入)的字段:TypeATypeC

这编译得很好,但在运行时抛出异常:

uPickle 支持吗?我应该以不同的方式为标记类定义自定义pickler吗?我在文档中没有看到我的案例的任何示例。

0 投票
2 回答
83 浏览

scala - 是否可以为 akka 编写一个令人讨厌的序列化程序

我想使用 upickle 实现一个 akka 序列化器,但我不确定它是否可能。为此,我需要实现类似以下的序列化器:

问题是我不能在没有相关的 Writer/Reader 的情况下调用 writeBinary/readBinary。有没有办法可以根据对象类查找这些?

0 投票
2 回答
86 浏览

scala - 使用 BooPickle 和 RocksDb 将额外字节添加到序列化中

所以我使用 BooPickle 在将 Scala 类写入 RocksDB 之前对其进行序列化。要序列化一个类,

我有这个隐式类

该方法toStringEncoding是必要的,因为 BooPickle 没有以与 RocksDb 对键排序的要求很好地配合的方式序列化案例类。然后我将一堆键值对写入几个 SST 文件,并将它们摄取到 RocksDb 中。但是,当我从数据库中查找密钥时,找不到它们。

如果我遍历数据库中的所有键,我发现键被成功写入,但是额外的字节被写入数据库中的字节表示。例如,如果key.serialize输出这样的东西

我会在数据库中找到是这样的

额外的非零字节替换字节数组末尾的零字节。另外字节数组的大小也不同。当我调用该serialize方法时,字节数组的大小为 512,但是当我从数据库中检索密钥时,大小为 4112。有人知道可能是什么原因造成的吗?

0 投票
1 回答
269 浏览

scala - scala upickle / ujson中JSON null的惯用处理

我是 Scala 的新手,想学习解决常见问题的惯用方法,例如 Python 的 pythonic。我的问题是关于使用upickle读取 JSON 数据,其中 JSON 值在存在时包含字符串,在不存在时包含 null。我想使用自定义值来替换 null。一个简单的例子:

问题在于字段"sometimes":当为 null 时,我们不能应用.str(或任何其他函数映射到除 null 之外的静态类型)。我正在寻找类似的东西, null 的替代品m("sometimes").str("DEFAULT").length在哪里。"DEFAULT"

想法 1 使用模式匹配,以下工作:

鉴于 Scala 的简洁语法,这看起来有点复杂,并且在处理多个值时会重复。

想法 2相关问题的回答提到创建具有默认值的案例类。对于我的问题,当根据上下文需要不同的替换值时,案例类的创建对我来说似乎不灵活。

Idea 3 Anwers to another question (not specific to upickle)讨论使用Try().getOrElse(),即:

但是,讨论提到为常规程序路径抛出异常是昂贵的。

解决这个问题的惯用但简洁的方法是什么?

0 投票
1 回答
242 浏览

json - scala ujson.read() 返回 ujson.Obj

我正在尝试使用李浩毅的 ujson 读取一个 json 字符串。这是字符串:

这就是我的阅读方式:

但是,返回类型是ujson.Obj,而不是Arr(ArrayBuffer(Obj),正如预期的那样,当我尝试获取时jsonData(0),我得到的是json.Value$InvalidData: Expected ujson.Arr

我问这个问题是因为我尝试使用 ujson 对象来创建一个 upickle 对象,但我不能,我怀疑这是因为这个初始错误。

关于为什么会发生这种情况的任何想法?任何帮助将不胜感激!提前致谢!!

0 投票
1 回答
41 浏览

scala - Scala - 错误 java.lang.NoClassDefFoundError: upickle/core/Types$Writer

我是 Scala/Spark 的新手,所以请放轻松:)

我正在尝试在 AWS 上运行 EMR 集群,运行我打包的 jar 文件sbt package。当我在本地运行代码时,它工作得非常好,但是当我在 AWS EMR 集群中运行它时,我收到一个错误:

ERROR Client: Application diagnostics message: User class threw exception: java.lang.NoClassDefFoundError: upickle/core/Types$Writer

据我了解,此错误源于 scala/spark 版本的依赖关系。

所以我使用 Scala 2.12 和 spark 3.0.1,在 AWS 中我使用的是 emr-6.2.0。

这是我的 build.sbt:

我错过了什么?

谢谢!