问题标签 [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 回答
594 浏览

json - 如何解析字符串或对象的 JSON 数组?

我遇到的一个 API 的 JSON 结构很差。有人认为发回如下所示的列表是个好主意

我已经想出了一种这些数据放入结构中的方法,但这很有效:

这无助于我规范化和验证数据。

有没有一种好方法可以将第一个对象变成类似的东西

我看到type_name可能可用于检查类型并在它被解析后进行后处理serde_json,但我也看到这type_name是出于诊断目的,所以我不想将其用于此目的。

0 投票
1 回答
211 浏览

rust - 将对象转换为 serde_json::Value 而不进行序列化和反序列化

我有这个结构,它有一个包含类型的字段Option<serde_json::Value>

我希望能够在该字段中存储任何对象(即由任何结构创建的对象)。我正在使用的当前方法是首先将对象转换为 JSON 字符串(使用serde_json::to_string),然后再将其转换为serde_json::Value使用serde_json::from_str

我这样做是为了可以发送带有任意数据的不同类型的 JSON 请求。

那么,有没有办法将任何 serde-serializable 对象转换为serde_json::Value不执行serde_json::to_stringand serde_json::from_str?如果我走错了路,请推荐一个更好的,ty!

0 投票
2 回答
529 浏览

rust - 如何使用 serde_json 从 JSON 数组中流式传输元素?

我有一个 5GB JSON 文件,它是一组具有固定结构的对象:

我知道我可以尝试使用如何使用 Serde 使用顶级数组反序列化 JSON?

有多个问题:

  1. 首先将其作为一个整体读取
  2. 读取为字符串后,它将其转换为User结构向量(我不想要那个)

我尝试了如何从 Rust 中的文件/流中懒惰地读取多个 JSON 值?但它会在打印任何内容之前读取整个文件,并在循环内一次打印整个结构。我期待在循环中一次一个对象:

在此处输入图像描述

理想情况下,(解析的)用户对象的解析和处理应该在两个单独的线程/任务/例程中同时发生或通过使用通道发生。

0 投票
2 回答
253 浏览

rust - 如何正确解析带有 Unicode 转义序列的 JSON?

操场

对象键的值如何"a"转化为下面的字符串?

我试过serde_jsonand str::from_utf8,但我总是得到"b\u001fc"结果。转义字符序列未正确解释。如何解决?

0 投票
1 回答
289 浏览

json - 从 serde_json 中的无类型 JSON 中提取数据时如何处理错误?

我有一个serde_json::Value我希望包含一个对象数组的对象。从这些对象中,我想提取 2 个值并在任何失败时返回错误。到目前为止,这是我的代码:

当我使用.unwrap()它时效果很好,但是在将返回类型更改为Result并将 unwraps 替换为之后,?我得到了以下编译错误:

我事先不知道 JSON 的确切结构,因此无法将其解析为结构。我所知道的是,它很可能是一个包含name字符串字段和stock整数字段的对象数组,我想将它们提取到地图中。如果情况并非如此,那么我想返回一个错误。最简单的方法是什么?

更新:在遵循 Lagerbaer 的建议并进行一些挖掘后,我想出了以下解决方案。

用于ok_or()映射OptionResult,必须使用anyhow!宏使其与无论如何结果类型兼容。事实还证明,它collect()实际上接受了一个迭代器 Result<(String, u32)>来生成Result<HashMap<String, u32>>具有我想要的确切行为的 a,也就是说,如果没有错误,则返回第一个错误或完整的哈希映射。

0 投票
0 回答
39 浏览

rust - 我们如何控制用 serde_json 序列化的结构的显示?

一些简短的上下文:我们将 uuid 存储在我们的数据库中;这些功能作为 id。我们希望将这些以 base62 编码表示形式呈现给各种 http 客户端。理想情况下,我们不必记住每次编码结构时都这样做。值得注意的是,我们还利用sqlx并通过query_as!. 例如:

然后后来:

理想情况下,我们希望利用相同的结构将数据发送到客户端,并且在从网络中提取数据时也是如此。我们还想在这样做时转换 id(在接收时从 base62 编码转换为 uuid,在发送时从 uuid 转换为 base62 编码)。

我们如何在继续利用这些结构的同时专门控制 JSON 序列化和反序列化的行为?

0 投票
1 回答
149 浏览

rust - 通过 serde 捕获原始有效载荷

我想知道是否有办法使用 serde_json 保留原始字符串?考虑这个例子:

我的结构最终会包含这样的值:

目前,我通过反序列化为Value,然后将此值反序列化到User结构中并将 Value 分配给该raw字段来做到这一点,但这似乎不对,也许有更好的方法吗?

0 投票
1 回答
97 浏览

rust - 在 rust 中,将带有可选参数的平面 JSON 反序列化为嵌套结构和枚举

我正在尝试反序列化一些 JSON:{"id":1,"status":"Failed","cause":"Error"}其中状态可以是“正在执行”、“成功”或“失败”之一,我的问题是,如果状态为“失败”,我只会得到“原因”。

我不希望原因成为原因,Option<String>因为如果状态为“失败”,我总是会得到原因,而如果状态是“正在执行”或“成功”,我永远不会得到原因。我宁愿有类似的东西:

在上面的代码片段中,所有 status_from 测试都通过了,而 download_from 测试失败了。如果我#[serde(tag = "status")]从状态中删除属性,那么只有 download_from_executing 和 download_from_succeeded 通过。

我只关心能够反序列化下载结构。

当我有一个状态为“失败”和原因的 JSON 主体时,我想找到正确的 serde 属性集来反序列化下载结构。

我的货物.toml:

0 投票
1 回答
109 浏览

rust - 您可以从映射或字符串反序列化结构吗?

考虑这个Config包含结构向量的Host结构:

使用派生的Deserialize实现,可以使用serde_json和成功反序列化以下 JSON 和 YAML 配置文件serde_yaml

但是,我还希望能够Host从字符串反序列化结构。但是,重要的是我还可以从地图反序列化它,理想情况下,矢量可以由两种格式组成。例如:

在结构#[serde(try_from = "String")]之上Host,我可以轻松地支持字符串反序列化......但是它不再反序列化地图格式。

serde 网站有一个关于反序列化字符串或结构的页面deserialize_with,但它需要只能应用于字段(而不是结构容器)的属性。我不确定这种技术是否可行,因为我的领域是 aVec<Host>而不仅仅是 a Host

这有可能实现吗?

0 投票
1 回答
77 浏览

rust - 如何在匹配臂中表达变量类型?

serde_json我正在尝试使用Rust解析一段 json 字符串。我想使用以下语法匹配解析的结果:

但是编译器向我抱怨他不知道的类型,result当然,他是对的。但是我怎么能告诉他的类型result呢?我尝试了以下代码,但它也没有工作。所以我想在匹配臂中表达变量的类型。