问题标签 [json4s]

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 投票
2 回答
9586 浏览

json - 检查对象是否在 json4s/lift-json 中有字段

我有一个带有一些字段的 json,我想检查其中一些是否存在。我正在提取值并针对 JNothing 进行测试,但它太冗长了:

是否有更紧凑的方法来使用 json4s/lift-json 检查 json 对象中是否存在字段?理想情况下是这样的:

0 投票
2 回答
4064 浏览

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

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

使用 Jackson 库,通过声明注释非常容易。但我正在寻找一个纯粹的 scala 库/解决方案。有没有更好的库或方法在 scala 中通过简单的字段重命名进行对象到 json 的序列化?

0 投票
1 回答
517 浏览

json - Json4s 产生奇怪的 Json

这就是我所拥有的:

这就是我得到的:

但这就是我想要回来的:

我在这里做错了什么?


细节

0 投票
1 回答
375 浏览

scala - lift-json XPath \\ 运算符具有不同的返回类型,具体取决于 num 匹配项

对于具有相同模式的数据的相同查询,我希望json \\ "something"始终返回相同类型的对象(或者至少是始终同构的对象),但是,请考虑:

...因此 n = 0 和 n >= 2 的情况得到一致处理,但 n = 1 的特殊情况是JValue.

为什么会这样?是设计使然吗?

与在 a 上的映射进行比较List

与 Scala 的 XML 比较

那么为什么不应该期望 lift-json\\运算符具有相同的语义呢?

http://liftweb.net/api/26/api/#net.liftweb.json.package上的文档有:

按名称查询JSON 字段的类似 XPath 的表达式。返回所有匹配的字段。

0 投票
0 回答
1054 浏览

json - 如何将元组列表序列化为 JSON 对象

我有一个List[(String, Any)]在 json4s 中,我write(lst)用来序列化 JSON。如何在保留顺序的同时将其序列化为 JSON 对象而不是列表?

注意:我知道这write(lst.toMap)将序列化为一个对象,但我想保留顺序。

0 投票
1 回答
712 浏览

scala - Json4s 支持带有 trait mixin 的案例类

我正在尝试使用支持杰克逊的 json4s 序列化 scala 案例类。但是对于我试图混合特征的场景,它无法序列化类。下面是一个代码示例。

当我执行下面的代码时,我得到空的大括号,没有序列化的值,但是如果我删除 trait mixin,那么 CrystalFieldInfo 值会被正确序列化

将不胜感激任何洞察这个问题。提前致谢

0 投票
3 回答
947 浏览

json - 在 Scala 中使用 LINQ 样式的查询解析 JSON

假设我需要解析一个 JSON(见下文)。

首先,我正在解析“状态”字段以获取case class Status(见下文)的实例

是否有意义 ?

的类型statusListList[Status]。它包含一个Status项目。如果解析失败,statusList则为空。我喜欢它,因为我想要Option[Status]而不是List[Status]

我可以很容易地转换List[Status]Option[Status]withheadOption但我想Option[Status]直接得到。

我可以解析 JSONjson4s以获取 Option[Status] 而无需先获取List[Status]吗?

0 投票
1 回答
289 浏览

scala - 如何“脱糖”这个 Scala 语句?

Scala 中的 LINQ 样式查询json4s如下所示:

我不明白(2)是如何工作的。你会如何去糖这个 -for声明?

0 投票
3 回答
2608 浏览

json - 将键值字符串转换为 Scala Map 的方法

在这种情况下,我正在从 KV 存储(Redis)读取数据。返回的数据格式如下。

键是String,值是Int。我想把它转换成Map[String,Int]

我查看了json4s JSON API,我当前的代码如下所示。有没有更好/更容易/更清洁的方法来做到这一点?

0 投票
1 回答
1352 浏览

json - 调试json4s读取反序列化错误

我正在尝试使用我无法控制的 API,该 API 的文档记录不佳且有些不一致。这意味着有时,API 返回的类型与记录的类型或您通常看到的类型不同。对于这个例子,我们将看一个在我通常会看到字符串的地方返回一个数组的情况。这使得 API 很糟糕,但我真正的问题是:我怎样才能更容易地追踪这些东西?现在,错误看起来像这样:

在破译问题之后(为什么JValue::toString不发出 JSON 字符串让我完全感到困惑),我可以弄清楚当我case class只能够处理Strings 时 API 返回了一个数组。伟大的。我的问题是,在我的对象模型和 JSON 的内容之间找到这种差异似乎比它应该做的要困难得多。

目前,这是我寻找解码错误的工作流程:

  1. 希望不良数据有某种识别标记。如果这不是真的,那么这是更多的猜测,您将不得不为每个看起来像坏位的条目重复以下步骤。
  2. 经历将JArray(List(JString(...), ...))错误消息转换为有效 JSON 的麻烦,希望我在获取数据的 API 端点上以相同的方式编码 JSON。如果这不是真的,那么我使用 JSON 格式化程序 ( jq) 来一致地格式化所有数据。
  3. 在源数据中找到解码错误的来源。
  4. 回溯数组和对象,以发现我需要如何更改对象模型以更准确地表示从 API 返回给我的数据。

一些背景知识:我来自 C++,为此我推出了自己的 JSON 反序列化框架。使用我构建的库时的等效错误是:

这是我使用手卷库时的过程:

  1. 将预期类型 ( std::string) 与实际找到的数据() 进行比较,["3c8723eceb1a","cba8849e7a2f"]并更改我的数据模型以获取源中数据的路径 ( result.taskInstances[914].subtasks[5].identifier)

正如你所看到的,我可以立即跳到我实际遇到的问题上。

我的问题是:有没有办法更快地调试我的数据模型和我从 API 返回的结果之间的不一致?

我正在使用json4s-native_2.10版本3.2.8


一个简化的例子:

不与 Scala 啮合class