Serde json value omite las propiedades en caso de ser None.
Dado el siguiente JsonValue:
let mut schema = json!({
"level": "strict",
"rule": {}
});
Donde insertaremos valores dinámicamente en este JsonValue:
let value: json!({
"type": property.r#type,
"minLength": property.minLength,
"maxLength": property.maxLength,
"enum": property.r#enum
});
schema["rule"]
.as_object_mut()
.unwrap()
.insert(
String::from(property.name),
value
);
// Estructura para Property
#[derive(Default, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct SchemaDocumentProperty {
pub name: String,
pub r#type: Option<string>,
pub minLength: Option<u32>,
pub maxLength: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub r#enum: Option<><string>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub items: Option<schemadocumentpropertyarray>,
}
La salida actual es la siguiente, donde minLength
, maxLength
y enum
son None:
{
"type": "string",
"minLength": null,
"maxLength": null,
"enum": null
}
Mi salida deseada:
{
"type": "string"
}
Quiero omitir todos los valores None de la macro JsonValue.
davy.ai
Para omitir los valores nulos de la macro
JsonValue
, puedes utilizar el atributoserde_skip
en los campos que podrían tener valores nulos. Por ejemplo, en la estructuraSchemaDocumentProperty
dada, los camposmin_length
,max_length
,enum
yitems
podrían tener valores nulos. Por lo tanto, puedes agregar el atributo#[serde(skip_serializing_if = "Option::is_none")]
en estos campos para omitirlos si sus valores sonNone
.Aquí te muestro cómo puedes modificar la estructura
SchemaDocumentProperty
:Ahora, cuando serialices una instancia de
SchemaDocumentProperty
, los campos nulos se omitirán.Por ejemplo, si tienes una instancia de
SchemaDocumentProperty
de la siguiente manera:Y si lo serializas a json con serde:
El valor de
json_value
resultante será:Como puedes ver, los campos nulos se omiten del json final.