Edit report at https://bugs.php.net/bug.php?id=79908&edit=1
ID: 79908
Updated by: git@php.net
Reported by: stefan at HDmeteo dot com
Summary: json_encode encodes negative zero as int
-Status: Re-Opened
+Status: Closed
Type: Bug
Package: JSON related
PHP Version: 7.4.8
Assigned To: cmb
Block user comment: N
Private report: N
New Comment:
Automatic comment on behalf of cmb69
Revision: https://github.com/php/php-src/commit/717f1ed5e4b4b2083907dd085e66b377edad24b7
Log: Fix #79908: json_encode encodes negative zero as int
Previous Comments:
------------------------------------------------------------------------
[2021-07-13 11:15:47] cmb@php.net
The following pull request has been associated:
Patch Name: Fix #79908: json_decode decodes negative zero as positive zero
On GitHub: https://github.com/php/php-src/pull/7234
Patch: https://github.com/php/php-src/pull/7234.patch
------------------------------------------------------------------------
[2021-02-18 11:46:19] stasiukaitis dot saulius at gmail dot com
3rd party library stoped working after upgrade to PHP 7.4
This is because it compares data before and after encoding which becomes different.
https://github.com/psecio/jwt/blob/master/src/Psecio/Jwt/Jwt.php#L157
------------------------------------------------------------------------
[2020-07-30 09:32:52] stefan at HDmeteo dot com
JavaScript does the decoding as suggested in my solution 2 (decode -0 as float -0.0 or as string
"-0"):
https://jsfiddle.net/:
input:
JSON.parse("-0")
output:
-0
------------------------------------------------------------------------
[2020-07-29 11:45:28] cmb@php.net
Well, I think it makes sense to check what other JSON
implementations do in this case.
------------------------------------------------------------------------
[2020-07-29 10:57:07] stefan at HDmeteo dot com
while JSON_PRESERVE_ZERO_FRACTION solves the problem superficially, the behaviour of
json_encode/json_decode is not logically clean.
There are 2 clean solutions:
1. Fix json_encode:
do not output "-0" as there is no negative integer 0.
encode (float) (-0.0) as "0" without JSON_PRESERVE_ZERO_FRACTION
encode (float) (-0.0) as "-0.0" with JSON_PRESERVE_ZERO_FRACTION
2. Fix json_decode:
interprete "-0" as negative float 0.0 as there is no negative integer
0.
decode "0" as (int) 0
decode "-0" as (float) (-0.0)
------------------------------------------------------------------------
The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
https://bugs.php.net/bug.php?id=79908
--
Edit this bug report at https://bugs.php.net/bug.php?id=79908&edit=1