lidatong / dataclasses-json

Easily serialize Data Classes to and from JSON
MIT License
1.34k stars 150 forks source link

[FEATURE] Omitting undefined Optional field when serializing #501

Open PierreRust opened 7 months ago

PierreRust commented 7 months ago

Description

When using a class with an optional field, for which no value has been defined (i.e. is None) I would like the generated serialized json not to contain that field.

When the output must validate against a predefined json shema, serializing the filed with a null of default value makes the validation fails.

Maybe this behavior is already supported but I couldn't find any way to achieve this.

See this example for is currently generated and what I would like to have instead :

from dataclasses import dataclass
from typing import Optional
from dataclasses_json import DataClassJsonMixin

@dataclass
class Foo(DataClassJsonMixin):
    bar: str
    foo: Optional[str] = None

f = Foo(bar="b")

# here we get  {"bar": "b", "foo": null}
# as foo is optional and not used here, I would like to get {"bar": "b"}
# This would also validate a json schema where 'foo' is not defined as "required"
print(f" json str : {f.to_json()}")

Possible solution

No response

Alternatives

Currently I use an empty string as a default value, It is the only way I've found to valide the schema, but unfortunately it is not really correct as a property with an empty string as a value is not equivalent to not having the property at all.

Context

No response

USSX-Hares commented 7 months ago

@george-zubrienko, could be a good addition for v1

george-zubrienko commented 7 months ago

Yeah I agree. Re v1, it has not been forgotten, I have one major contrib I need to make within other OSS project and then I will have time to kick of the ball on v1. High hopes for Feb next year. Also considering how many projects depend on DCJ, I see no harm in taking things slow :D