问题标签 [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.
mongodb - 如果在 Rust 中使用 skip_serialize serde 属性,则无法将字段写入 MongoDB 文档
我希望能够将字段写入 mongo 文档,但在将对象作为响应传递给客户端时避免对其进行序列化。
我尝试使用#[serde(skip_serializing)]
. 但是,它并没有按我的预期工作,我认为这是因为当它从 mongo 库转换Region
使用时to_document
,它会使用 skip 属性进行序列化,因为它还使用 serde 序列化程序。如果我在这里错了,请纠正我。
我有两个定义如下的结构:
在插入后手动检查文档时,没有extApiId
字段。
我尝试通过键(类似于document.insert("_id", id)
)手动将其添加到生成的文档中,但我找不到也无法弄清楚如何通过键字符串访问数组中的字段。理想情况下,无论如何我都不想这样做。
这是我的更新函数中的一些示例代码:
有关如何解决此问题的任何建议?我考虑过是否有Area
fieldInsertableArea
属性,我想我也需要一个InsertableRegion
for。
arrays - 在 Rust 的数组中插入 serde_json 对象
所以我有一个问题。我有一个基本的 serde_json 值,如下所示:
我可以轻松地将一个对象插入为:
但我不知道如何将它们动态添加到第一个示例中的数组中。我曾经用push
板条箱来做json
,但这似乎不存在于serde_json
. 有任何想法吗?
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}
。
所以我的问题是:有没有办法分配 serdetag
或untagged
属性,以便它们仅在序列化/反序列化期间应用(类似于 serde's rename
)?如果没有,关于如何实施Serialize
和/或Deserialize
实现我的目标的任何建议?
rust - 处理 JSON 以构造查询
我正在尝试使用 Serde 处理一个非常大的 Graphson 数据 JSON 文件 (1TB) 以生成 Gremlin 查询。我知道 JSON 文件的确切格式,但我不能将它直接映射到 Rust 结构,因为我认为它会溢出内存。反序列化的结构看起来像:
我的想法是为每个生成的 V 和 E 调用回调来更新我的全局查询。我可能已经找到了一种使用serde-ignored执行此操作的方法,调用一个回调来更新每个忽略的 Struct 的状态。但我不确定它会起作用,我想知道是否有另一种方法可以做到这一点。
rust - 让 serde 只为人类可读的序列化程序生成十六进制字符串?
我目前正在使用serde-hex。
失败:
因为它已将值扩展为二进制码的十六进制字符串。
我有许多需要用 serde_json 和 bincode 序列化的结构。 serde_hex
正是我需要的 JSON 序列化。当使用 bincode serde-hex 时,仍然将数组转换为十六进制字符串,这是不想要的。
我注意到secp256k1 使用d.is_human_readable()
.
我怎样才能使serde_hex
仅适用于serde_json
并被忽略bincode
?
rust - 使用 serde 将枚举变量的名称作为字符串获取
我正在尝试获取枚举变体的名称,因为字符串 serde 期望/创建。例如,假设我有以下枚举:
然后我怎样才能获得变体的 serde 名称?就像是
serde_json
对于没有值的变体,我可以使用, 我可以做的变体:
这不是最好的解决方案,因为我需要去掉引号,但在技术上可以工作。
更糟糕的是当枚举变体具有值时。它变得更加混乱。
有没有一种干净的方法来实现这一目标?我找不到将密钥名称作为字符串获取的 serde API。
rust - 如何从 JSON 数组中延迟反序列化?
问题描述
使用serde_json
将很长的对象数组反序列化为 aVec<T>
可能需要很长时间,因为必须预先将整个数组读入内存。我想迭代数组中的项目,以避免预先处理和内存要求。
到目前为止我的方法
StreamDeserializer
不能直接使用,因为它只能迭代背靠背放置的自定界类型。所以到目前为止我所做的是编写一个自定义结构来实现Read
,包装另一个Read
但省略开始和结束方括号以及任何逗号。
例如,阅读器会将 JSON[{"name": "foo"}, {"name": "bar"}, {"name": "baz"}]
转换为{"name": "foo"} {"name": "bar"} {"name": "baz"}
可以与StreamDeserializer
.
这是完整的代码:
它是这样使用的:
最后,一个问题
必须有更好的方法来做到这一点,对吧?
rust - 如何将 JSON 反序列化为具有 Box<[u8]> 值的结构?
我有一个需要包含“字节”字段的结构,我正在尝试从 JSON 反序列化它。
当我使用&'a [u8]
时,这是可行的,但是我需要向这个结构以及包含它的结构添加一个生命周期注释,等等。
我以为我可以通过“拥有”字节并使用封闭来解决它Box
,但这不起作用。我试图弄清楚为什么不这样做,或者是否有办法(或者使用一些 serde 注释,或者这个字段的自定义帮助程序,或者其他东西)让它工作。
更具体地说,这有效:
这不会:
在这两种情况下,我都将其称为:
Box
替换为Vec
(即 as Vec<u8>
)时我遇到了同样的问题
编辑解决方案:
正如@lpiepiora 在下面指出的那样,这需要一个额外的包装器。类似于以下内容,由serde_bytes
crate 提供:
rust - Rust:如何为具有泛型类型的结构派生反序列化?
上面的代码无法编译,抱怨未使用的生命周期参数,但如果我删除它,Deserialize
会丢失生命周期。
上面的代码可以在不使用幻像标记的情况下正确DeserializeOwned
吗?
arrays - 结构中的枚举数组打印变体名称和值
我有一个使用枚举的结构,但是在打印时它给出了枚举名称和值,而不仅仅是值。我想使用 serde_json 序列化它以作为 JSON 请求发送。
我想将结构重新用于 geth json-rpc 的不同命令,而不是为每种类型的命令制作不同的结构。这就是为什么我想到使用枚举。但我做错了什么。可能是打印,但 json-rpc 表示该参数也无效。
输出:
我需要的是 params 字段params: ["latest",true]