问题标签 [serde]
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.
json - 从 JSON 数组中选择键的子集
我正在尝试解析一个输出如下输出的 JSON API:
来源:http ://api.open-notify.org/astros.json
我为此使用了serde,并且到目前为止已经设法提出了以下代码:
现在,ppl_value_space
正如预期的那样,得到我这个:
但是,我想找到"name"
关键,因为基本上有类似的东西:
以便能够仅获取当前在太空中的宇航员的姓名。
我如何得到"name"
inside "people"
,没有"craft"
?
我试着去name
喜欢这样:
但它以恐慌结束,这基本上意味着关键是None
,因为我unwrap()
是Option<T>
.
json - serde 中 rustc_serialize::Json 的等价物是什么?
由于serde 库将成为 rustc_serialize 的替代品,因此我正在尝试重构我的库以使用它。我无法弄清楚相应的类型rustc_serialize::Json
是什么。假设,我有一个接受 json 的方法:
对应的是serde_json
什么?是不是这个:
或这个:
或者是其他东西?
json - serde_json - 如何使我的结构可从 / 转换为 json?
查看serde_json 的文档,我不明白我必须实现什么特征才能使结构可序列化到 json 并从 json 反序列化。显而易见的答案可能是Deserializer
,Serializer
但这些是结构,而不是特征。
有了rustc-serialize
我可以实现ToJson
和FromJson
特征。
json - Rust 和 Serde JSON 反序列化示例?
我试图弄清楚如何使用 Serde 将 JSON 反序列化为结构。例如,serde_json自己的文档中的示例 JSON包含以下数据:
现在,如果我们假设上述数据在变量“输入”和以下代码中:
... struct 应该是什么Data
样子?
json - 根据 JSON 中的字段有条件地解码 JSON
我从 API 接收 JSON,响应可以是 30 种类型之一。每种类型都有一组唯一的字段,但所有响应都有一个字段type
来说明它是哪种类型。
我的方法是使用serde。我为每种响应类型创建一个结构并使它们可解码。一旦我有了它,我该如何选择应该将哪个结构用于新收到的消息?
目前,我已经创建了另一个TypeStruct
只有一个字段的结构type
。我将 JSON 解码为 a TypeStruct
,然后根据类型值为接收到的消息选择适当的结构,然后再次解码消息。
我想摆脱这种解码重复。
json - 使用 Serde 库时如何禁用“未使用属性”警告?
除了禁用警告之外,为什么会发生这种情况?
src/config.rs:4:10: 4:21 警告:未使用的属性,#[warn(unused_attributes)] 默认开启 src/config.rs:4 #[derive(Deserialize)]
添加#[allow(unused_attributes)]
没有帮助。
json - 用 serde_json 对迭代器进行编码的惯用方法是什么?
我正在尝试drain()
使用vec
Rust 并将结果编码为 JSON 字符串。最好的,惯用的方法是什么?
json - 反序列化嵌套 JSON 结构时,Serde 返回 SyntaxError “预期值”
我正在尝试从 Web API(规范)反序列化 Spotify 元数据 JSON。我正在使用 hyper 从服务器中检索 JSON,并使用 serde 将 JSON 转换为我可以在 Rust 中实际使用的东西。从服务器检索 JSON 就好了,但是当我尝试将 JSON 转换为可以使用的对象时,Rust 恐慌并抛出错误:
这一点也没有帮助,因为它根本不指出哪里出了问题。在网上搜索时,我偶然发现了一个 serde 问题,这让我认为该问题与 JSON 的嵌套结构有关。
谁能看到哪里出了问题?修复错误对我来说是最好的解决方案,但如果另一个板条箱是一个更好的解决方案,我也想听听。我已经尝试过 rustc-serialize,但是那个 crate 无法处理 json 中的“类型”变量。
我使用的代码是:
JSON:
json - 反序列化为带有枚举成员的结构
我正在尝试采用一些看起来像这样的 json:
并用于serde
将其反序列化为如下数据结构:
我有一些代码,但老实说,它几乎直接来自serde
“没有宏的反序列化”指南,我不确定我需要做什么才能将foo
字段反序列化为Foo
.
我已经Deserialize
为Foo
枚举实现了,我认为这足以让visitor.visit_value()
我impl serde::de::Vistor for QuuxVisitor
调用那个版本的deserialize
,但似乎并非如此。
当我尝试反序列化时得到的错误Quux
是called 'Result::unwrap()' on an 'Err' value: SyntaxError("expected value", 2, 20)
,但如果我Quux
改为使用 a String
forfoo
而不是 a Foo
,它反序列化很好。
json - 错误:此值的类型必须在此上下文中已知(Rust)/serde_json 值
我正在使用 serde_json 反序列化 json 文档。我有一个函数,给定一个字符串(这是 json 文档),将返回一个 serde_json 值(这是一个表示 json 类型的枚举),返回一个选项。该值会根据需要传递给其他函数。
但是,我意识到传递值并不是我想要的,因为这样做,密钥不可用。
为了说明我的观点,如果我有一个如下所示的 json 文档:
“root”是一个 json 对象,“regex”是 json Null,“prefixes”是一个 json 数组。
现在,json 类型 Value 是一个枚举,带有表示 json 类型的鉴别器,例如上面给出的示例的 Object、Null、Array。
serde_json crate 使用 std::collections::BTreeMap 来表示 json 文档中的节点,其中 String 类型表示 json 键(在上面,这些将是“根”、“正则表达式”和“前缀”。所以传递只是对 Values 的引用只是部分有用,我应该改为传递 BTreeMap ,这样我也可以访问密钥。
所以这是我试图重写的以下函数:
所以我开始重新编写函数,但遇到了“在这个上下文中必须知道这个值的类型”错误:
我在stackoverflow上发现了其他类似的问题: 这个值的类型必须在这个上下文中是已知的
并将其用作助手,我尝试按如下方式插入类型:
这不能解决问题。此外,尝试了其他类似的变化无济于事。那么我该如何解决这个问题?
编辑:
我在这个应用程序中有另一个功能如下:
...这工作正常。在这里你可以看到我可以调用 as_object() ,然后以元组对的形式获取键和值。我不明白为什么 as_object 在一种情况下有效,而在另一种情况下无效。我想拉出 BTreeMap 并将其作为借来的项目传递。