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

json - 使用 Serde 反序列化嵌套 JSON 结构时出现“无效类型:映射,需要序列”

我正在尝试轮询 GitHub API 的问题并将其打印出来。为此,我需要反序列化从 cURL GET 请求收到的嵌套 JSON 结构。

我正在尝试获取数组url中的所有对象:items

我的request函数发出一个 cURL 请求并接收上述 JSON。然后我使用 serde_json 反序列化 JSON

main.rs

我收到以下错误消息

我确定我在反序列化我的 JSON 结构时犯了一个愚蠢的错误,我尝试了许多排列和组合,但我无法得到任何工作。

0 投票
1 回答
93 浏览

rust - 向枚举结构变体添加展平时“找不到值 __collect”

我有以下代码:

这给了我一个编译器错误:

如果我将代码更改为此,它编译得很好:

我不明白编译器错误或为什么它不应该工作。Serde 是否不支持枚举结构变体中的字段属性?

0 投票
1 回答
1169 浏览

rust - 如何为某些输入类型而不是全部自定义反序列化实现?

我有一个这样的类型,虽然我的实际类型更大更复杂:

如果我Deserialize为这种类型实现,serde 会寻找这样的东西(我对 JSON 感兴趣):

我想自定义它,以便我也可以从字节数组反序列化:

我可以编写一个 impl 来处理数组,但我希望 serde 自动生成其余部分(将是visit_map):

那可能吗?在这个例子中,这并不难,但是当结构体很大时,手写反序列化可能会很痛苦。

这不是如何在使用 Serde 反序列化期间转换字段的副本?因为deserialize_with仅适用于 1 个字段。我无法理解如何让它适用于我的真实类型:

我想做的是:

  • 反序列化时,如果输入是数字,则返回 a Component::String。这可以与visit_i//uf64朋友一起完成。
  • 如果输入是字符串,则Component::String再次返回 a。这可以用visit_str/来完成string
  • 如果输入是一个数组[..],像往常一样反序列化它,但是将数组[1..]中的元素分配给数组[0]的额外元素。这可以通过visit_seq.
  • 如果输入是一个地图,让 serde 派生处理它。
0 投票
0 回答
345 浏览

rust - 无法使用 Serde 反序列化:`?` 运算符只能在返回 `Result` 的函数中使用

我正在尝试将 json 字符串反序列化为结构,但无法使其正常工作。我要做的就是打印出第一个与run["meta"]["username"]给定用户名匹配的状态和/或结果。

然而,尽管遵循了给定的例子,我似乎无法让它工作。现在我宁愿用无类型的值来做这件事,因为我不打算存储这些值但是当我这样做时我不能轻易地迭代初始数组,这样做runs.as_array().iter()似乎返回一个包含整个 jsonVec的单个元素String字符串,因此需要添加类型,但现在这也不起作用。

我得到的当前问题是:

这是没有意义的,因为如果你删除?它然后抱怨runs期待 aRuns而不是收到 a Result,所以我很困惑,它怎么能抱怨它正在返回 aResult然后抱怨它正在返回 a ()

显然我错过了一些东西,我只是没有看到它。

第二个问题是我不能使用.iter()

我知道它是一个包装的 Vec,但它不应该自动委托或其他东西吗?因为我不能使用类型别名或只是这样做:

因为我需要:

#[派生(调试,序列化,反序列化)]

在它之前允许它与 serde-rs 一起工作。

那么如何解决这两个问题,让我可以从 json 中获取我需要的数据?

这是一个最小的(生锈)示例:

0 投票
4 回答
17756 浏览

rust - 如何使用 Serde 序列化带有结构的 HashMap 作为 JSON 的键?

我想HashMap用结构作为键序列化一个:

这段代码可以编译,但是当我运行它时出现错误:

我更改了代码:

中的键HashMap现在是 au64而不是字符串。为什么第一个代码会出错?

0 投票
2 回答
2047 浏览

json - 如何迭代层次结构中的 JSON 对象?

我想name在层次结构的深处打印对象中每个联系人的 。联系人对象可能不会每次都具有完全相同数量的字段来构建合适的结构。我怎样才能做到这一点?

我对 Rust 非常陌生,基本上来自 JavaScript 背景。

0 投票
1 回答
2350 浏览

serialization - 如何在不包含枚举变体名称的情况下序列化枚举?

我正在尝试将枚举序列化为 JSON 字符串。我为我的枚举实现Serialize了 trait,正如文档中描述的那样,但我总是得到{"offset":{"Int":0}}而不是期望的{"offset":0}.

0 投票
1 回答
1185 浏览

json - 如何将所有字段都是默认值的类型反序列化为 None ?

我必须反序列化 JSON blob,在某些地方,整个对象的缺失被编码为具有相同结构的对象,但其所有字段都设置为默认值(空字符串和零)。

我会在反序列化后处理这个问题,但正如您所见,这种方法对于枚举值是不可能的:没有变体与空字符串匹配,因此反序列化完全失败。

我怎样才能教这个 serde?

0 投票
2 回答
6749 浏览

rust - 序列化为 null 或默认值的值时如何避免生成 JSON?

serde_json::to_string()函数将生成一个字符串,该字符串可能包括null一个Option<T>0一个u32。这使得输出更大,所以我想忽略这些类型的值。

我想简化以下结构的 JSON 字符串输出:

groupNoneproportion是0时,JSON字符串应该是"{}"

感谢您的回答如何更改 Serde 的默认实现以返回空对象而不是 null?,它可以解决Option问题,但0没有解决方案。

0 投票
1 回答
3231 浏览

rust - 如何为同一个 Serde 字段接受多个反序列化名称?

我正在尝试使用 Serde根据以下结构反序列化 JSON ( serde-json) 和 XML ( ) 文件:serde-xml-rs

我要反序列化的字段根据文件类型具有不同的名称。在这种情况下,我希望 JSON 文件有一个cubes包含多维数据集列表的键,但 XML 中的等价物将是多个<Cube />元素。

我不知道如何同时接受cubesCube作为反序列化的键。我发现最接近的是#[serde(rename = "Cube")]选项,但是当我使用它时,JSON 反序列化停止工作,因为它只接受Cube密钥。如果我删除该选项,XML 反序列化将停止工作,因为它只接受cubes作为密钥。

有没有一种简单的方法可以在 Serde 中实现这一点?