Why should it? serde_json::from_value is generic, it can return Result<Type, Error> for any Deserializeable Type, and Option<T> is Deserialize whenever T is Deserialize. And since you haven't required explicitly which type it must return, this type is inferred from the place where it is called.
serde use Option<T> as a "nullable" marker. when serializing, None is serialized as null (or equivalence) value of the format, and when deserializing, absence of value is deserialized successfully to None.
note, Option<T> does not guarantee deserialization will always succeed. when the value is NOT null but cannot be deserialized as T, you get an Err back instead of Ok(None).