JSON::encode_json produces a UTF-8 encoded binary string, which is what HTTP::Request expects.
JSON::to_json produces the corresponding Unicode string, which can coincidentally be byte-identical to the binary string depending on the codepoints used and on your Perl's internal representation, but can also be something else.