Canonical returns a canonical, JSON-esque representation of an input value.
Equal returns true if the two values are canonically equal.
Unmarshal should be used instead of [json.Unmarshal] to ensure that numeric types are decoded with minimum loss of precision.