问题标签 [serde-json]

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 投票
1 回答
269 浏览

mongodb - 如果在 Rust 中使用 skip_serialize serde 属性,则无法将字段写入 MongoDB 文档

我希望能够将字段写入 mongo 文档,但在将对象作为响应传递给客户端时避免对其进行序列化。

我尝试使用#[serde(skip_serializing)]. 但是,它并没有按我的预期工作,我认为这是因为当它从 mongo 库转换Region使用时to_document ,它会使用 skip 属性进行序列化,因为它还使用 serde 序列化程序。如果我在这里错了,请纠正我。

我有两个定义如下的结构:

在插入后手动检查文档时,没有extApiId字段。

我尝试通过键(类似于document.insert("_id", id))手动将其添加到生成的文档中,但我找不到也无法弄清楚如何通过键字符串访问数组中的字段。理想情况下,无论如何我都不想这样做。

这是我的更新函数中的一些示例代码:

有关如何解决此问题的任何建议?我考虑过是否有AreafieldInsertableArea属性,我想我也需要一个InsertableRegionfor。

0 投票
0 回答
498 浏览

arrays - 在 Rust 的数组中插入 serde_json 对象

所以我有一个问题。我有一个基本的 serde_json 值,如下所示:

我可以轻松地将一个对象插入为:

但我不知道如何将它们动态添加到第一个示例中的数组中。我曾经用push板条箱来做json,但这似乎不存在于serde_json. 有任何想法吗?

0 投票
1 回答
791 浏览

rust - 如何将 serde_json 与 enum 之类的联合类型一起使用?

"type"我有两个结构,我想用标签作为JSON中的字段来序列化/反序列化,就像这样。

这些按预期序列化。例如,

但是,当我尝试添加一个枚举作为结构的联合类型时,我遇到了麻烦。

上面的定义适用于反序列化 JSON,但在序列化期间添加了一个额外的字段。

更改#[serde(tag = "type")]#[serde(untagged)]onThing枚举会导致相反的问题:Thing实例正确序列化,但不再正确解析。

我的目标是让 JSON在反序列化期间{"type": "ThingB", value: 0}进行评估Thing::ThingB(ThingB {value: 0}),反之亦然,但前提是我要反序列化为Thing. 如果我有一个 unwrapped 的ThingB, like ThingB {value: 0},我希望它也可以序列化{"type": "ThingB", value: 0}

所以我的问题是:有没有办法分配 serdetaguntagged属性,以便它们仅在序列化/反序列化期间应用(类似于 serde's rename)?如果没有,关于如何实施Serialize和/或Deserialize实现我的目标的任何建议?

0 投票
0 回答
39 浏览

rust - 处理 JSON 以构造查询

我正在尝试使用 Serde 处理一个非常大的 Graphson 数据 JSON 文件 (1TB) 以生成 Gremlin 查询。我知道 JSON 文件的确切格式,但我不能将它直接映射到 Rust 结构,因为我认为它会溢出内存。反序列化的结构看起来像:

我的想法是为每个生成的 V 和 E 调用回调来更新我的全局查询。我可能已经找到了一种使用serde-ignored执行此操作的方法,调用一个回调来更新每个忽略的 Struct 的状态。但我不确定它会起作用,我想知道是否有另一种方法可以做到这一点。

0 投票
1 回答
239 浏览

rust - 让 serde 只为人类可读的序列化程序生成十六进制字符串?

我目前正在使用serde-hex

失败:

因为它已将值扩展为二进制码的十六进制字符串。

我有许多需要用 serde_json 和 bincode 序列化的结构。 serde_hex正是我需要的 JSON 序列化。当使用 bincode serde-hex 时,仍然将数组转换为十六进制字符串,这是不想要的。

我注意到secp256k1 使用d.is_human_readable().

我怎样才能使serde_hex仅适用于serde_json并被忽略bincode

0 投票
2 回答
1455 浏览

rust - 使用 serde 将枚举变量的名称作为字符串获取

我正在尝试获取枚举变体的名称,因为字符串 serde 期望/创建。例如,假设我有以下枚举:

然后我怎样才能获得变体的 serde 名称?就像是

serde_json对于没有值的变体,我可以使用, 我可以做的变体:

这不是最好的解决方案,因为我需要去掉引号,但在技术上可以工作。

更糟糕的是当枚举变体具有值时。它变得更加混乱。

有没有一种干净的方法来实现这一目标?我找不到将密钥名称作为字符串获取的 serde API。

0 投票
0 回答
177 浏览

rust - 如何从 JSON 数组中延迟反序列化?

问题描述

使用serde_json将很长的对象数组反序列化为 aVec<T>可能需要很长时间,因为必须预先将整个数组读入内存。我想迭代数组中的项目,以避免预先处理和内存要求。

到目前为止我的方法

StreamDeserializer不能直接使用,因为它只能迭代背靠背放置的自定界类型。所以到目前为止我所做的是编写一个自定义结构来实现Read,包装另一个Read但省略开始和结束方括号以及任何逗号。

例如,阅读器会将 JSON[{"name": "foo"}, {"name": "bar"}, {"name": "baz"}]转换为{"name": "foo"} {"name": "bar"} {"name": "baz"}可以与StreamDeserializer.

这是完整的代码:

它是这样使用的:

最后,一个问题

必须有更好的方法来做到这一点,对吧?

0 投票
1 回答
717 浏览

rust - 如何将 JSON 反序列化为具有 Box<[u8]> 值的结构?

我有一个需要包含“字节”字段的结构,我正在尝试从 JSON 反序列化它。

当我使用&'a [u8]时,这是可行的,但是我需要向这个结构以及包含它的结构添加一个生命周期注释,等等。

我以为我可以通过“拥有”字节并使用封闭来解决它Box,但这不起作用。我试图弄清楚为什么不这样做,或者是否有办法(或者使用一些 serde 注释,或者这个字段的自定义帮助程序,或者其他东西)让它工作。

更具体地说,这有效:

这不会:

在这两种情况下,我都将其称为:

Box替换为Vec(即 as Vec<u8>)时我遇到了同样的问题

编辑解决方案:

正如@lpiepiora 在下面指出的那样,这需要一个额外的包装器。类似于以下内容,由serde_bytescrate 提供:

0 投票
1 回答
354 浏览

rust - Rust:如何为具有泛型类型的结构派生反序列化?

上面的代码无法编译,抱怨未使用的生命周期参数,但如果我删除它,Deserialize会丢失生命周期。

上面的代码可以在不使用幻像标记的情况下正确DeserializeOwned吗?

0 投票
1 回答
120 浏览

arrays - 结构中的枚举数组打印变体名称和值

我有一个使用枚举的结构,但是在打印时它给出了枚举名称和值,而不仅仅是值。我想使用 serde_json 序列化它以作为 JSON 请求发送。

我想将结构重新用于 geth json-rpc 的不同命令,而不是为每种类型的命令制作不同的结构。这就是为什么我想到使用枚举。但我做错了什么。可能是打印,但 json-rpc 表示该参数也无效。

输出:

我需要的是 params 字段params: ["latest",true]