int | missing | absent

bauss jj_1337 at live.dk
Thu Jun 2 13:24:08 UTC 2022


On Thursday, 2 June 2022 at 08:27:32 UTC, Antonio wrote:
> JSON properties can be
> - a value
> - null
> - absent
>
> What's the standard way to define a serialziable/deserializable 
> structs supporting properties of any of this 4 kinds?:
>
> * int
> * int | null
> * int | absent
> * int | null | absent
>
>
> Whats the best library to manage this JSON requirements? (all 
> the 4 cases)?
>
>
> Thanks

null and absent should be treated the same in the code, it's only 
when serializing you should define one or the other, if you need 
to have null values AND absent values then attributing 
accordingly is the solution.

Which means deserialization only has value/null and serialization 
has value/null by default, but can be opt-in to also have absent.

One common mistake I've seen with parsers in D is that fields are 
often opt-out, instead of opt-in, which means you always have to 
declare all fields in a json object, but that's a bad 
implementation. All fields should be optional and only required 
when attributed.

An example:

```
struct A { int x; }
```

Should be able to be deserialized from this json:

```
{"x":100,"y":200}
```

However a lot of parsers in D do not support that. Instead you 
must declare the y member as well like:

```
struct A { int x; int y; }
```

Any decent parser should not have that problem.

If a field is required then it should be determined by an 
attribute like:

```
struct A {
@JsonRequired int x;
@JsonRequired int y;
}
```

If that attribute isn't present then it can be absent during 
deserialization.

Sorry I got a little off-track, but I felt like pointing these 
things out are important as well.


More information about the Digitalmars-d-learn mailing list