JsonPayload fails if given invalid JSON
If a POST request has a JSON payload that's a broken JSON string, then the JsonPayload object ends up with a string, rather than a dictionary, in its json property. That means that subsequent calls to its param method will raise an error.