- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的意思是,如果 2 个对象在某些属性上重叠,是否有办法尝试匹配 全部 其中?
例如:
use serde::{Serialize, Deserialize};
use serde_json; // 1.0.47; // 1.0.104
#[derive(Serialize, Deserialize, Debug)]
pub struct A {
pub item_1: i32,
pub item_2: i32,
}
#[derive(Serialize, Deserialize, Debug)]
pub struct B {
pub item_1: i32,
pub item_2: i32,
pub item_3: i32,
}
fn main() {
let json_data = r#"{"item_1" : 10, "item_2" : 100, "item_3" : 1000}"#;
if let Ok(data) = serde_json::from_str::<A>(json_data) {
println!("{:?}", data);
} else if let Ok(data) = serde_json::from_str::<B>(json_data) {
println!("{:?}", data);
}
}
A
,但我希望它失败,因为它有额外的数据,所以它下降到
B
(它匹配exaclty)。这只是我遇到的问题的一个例子。
最佳答案
Serde有很多attributes配置这种行为。
其中之一是 #[serde(deny_unknown_fields)]
这正是这样做的:
use serde::{Deserialize, Serialize};
use serde_json; // 1.0.47; // 1.0.104
#[derive(Serialize, Deserialize, Debug)]
#[serde(deny_unknown_fields)]
pub struct A {
pub item_1: i32,
pub item_2: i32,
}
#[derive(Serialize, Deserialize, Debug)]
pub struct B {
pub item_1: i32,
pub item_2: i32,
pub item_3: i32,
}
fn main() {
let json_data = r#"{"item_1" : 10, "item_2" : 100, "item_3" : 1000}"#;
if let Ok(data) = serde_json::from_str::<A>(json_data) {
println!("{:?}", data);
} else if let Ok(data) = serde_json::from_str::<B>(json_data) {
println!("{:?}", data);
}
}
B { item_1: 10, item_2: 100, item_3: 1000 }
关于rust - 有没有办法让 serde_json 严格反序列化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60489085/
存在生命周期和 serde::deserialize 问题。尝试阅读错误消息并尝试实现反序列化,但随后出现错误,我需要实现反序列化。 没有生命周期,它可以工作 use serde::{ Deseria
我有一些来自外部 API 的 json,我想输入。数据的形状如下所示: { "summary": { "field1": "foo", "field2": "bar", },
所以我有一个来自某处的 serde Value,我想在之后反序列化之前向 Value 添加额外的“字段”。我正在查看文档,但不知道该怎么做。 更具体地说,假设我有一个 HashMap,我想将其值合并到
我希望能够序列化 Vec作为 JSON(和其他基于 UTF-8 的格式)的 base64 编码字符串,同时保留二进制序列化格式的字节数组。 #[derive(Serialize, Deserializ
我写了一个测试用例: use serde::{Serialize, Deserialize}; use std::collections::BTreeMap; use std::fmt; #[deri
我的意思是,如果 2 个对象在某些属性上重叠,是否有办法尝试匹配 全部 其中? 例如: use serde::{Serialize, Deserialize}; use serde_json; //
我有一个用例,需要将 JSON 反序列化为“远程”(在另一个 crate 中定义)结构的映射。我在这方面经历了一段可笑的困难时期,所以我一定错过了一些明显的东西。 以下本质上是所需的最终状态: use
我正在尝试从具有以下维度的 Rust 文件中读取 JSON: { "DIPLOBLASTIC":"Characterizing the ovum when it has two primary
我有一个用例,需要将 JSON 反序列化为“远程”(在另一个 crate 中定义)结构的映射。我在这方面经历了一段可笑的困难时期,所以我一定错过了一些明显的东西。 以下本质上是所需的最终状态: use
我正在尝试从具有以下维度的 Rust 文件中读取 JSON: { "DIPLOBLASTIC":"Characterizing the ovum when it has two primary
在我的程序开始时,我从一个文件中读取数据: let file = std::fs::File::open("data/games.json").unwrap(); let data: Games =
#[serde(rename)] 似乎是正确的选择,但文档没有说明是否可行或如何操作。 这个 JSON 对象: { "name" : "myobject" "info" : {
我想将第 3 方库枚举与 JSON 相互转换。因为我不想编辑第 3 方源代码,所以我不想使用派生宏。 我想手写serde_json deserialize 方法。我认为模式匹配是可行的方法,但我需要匹
我被困在看似简单的问题上。我明白为什么我看到错误但似乎无法解决它。显然我遗漏了一些基本的东西。 fn terraform_deploy_info(app: &'a MyApp) -> std::res
我卡住了,下面是我收到的 JSON: { "BCH": { "aclass": "currency", "altname": "BCH", "decimals
我试图在 Rust 中 drain() 一个 vec 并将结果编码为 JSON 字符串。执行此操作的最佳惯用方法是什么? #![feature(custom_derive, plugin)] #![p
#[serde(rename)] 似乎是正确的选择,但文档没有说明是否可行或如何操作。 这个 JSON 对象: { "name" : "myobject" "info" : {
运行代码时: #![allow(unused)] use serde::{Deserialize, Serialize}; use std::collections::HashMap; use std
我有一个包含类型 Option 的字段的结构体 我希望能够在该字段中存储任何对象(即由任何结构创建的对象)。我目前使用的方法是首先将对象转换为 JSON 字符串(使用 serde_json::to_s
extern crate serde_json; use serde_json::Value; use std::fs::File; use std::io::prelude::*; fn main(
我是一名优秀的程序员,十分优秀!