If I insert an `Option<sqlx::types::Json<Struct>>` sqlx writes the text `null` in DB instead of mark that field as `NULL`

You're inserting a value of type Json<Option<Person>>, not of type Option<Json<Person>>, via the constructor Json(person). That encodes the None case as Json(None), which, indeed, represents a non-SQL-null JSON value that encodes as null.

You likely want to transpose the type to Option<Json<Person>> (indeed, you name it that in your title). You can do this with something like person.map(|value| Json(value)), where you presently have Json(person).