Bug #60111 [Fbk->Csd]: JSON_NUMERIC_CHECK option mangles certain values
| From: | digit6 at gmail dot com | Date: | Sat, 22 Oct 2011 20:47:04 +0000 |
| Subject: | Bug #60111 [Fbk->Csd]: JSON_NUMERIC_CHECK option mangles certain values | ||
| References: | 1 | Groups: | php.bugs |
| Request: | Send a blank email to php-bugs+get-164516@lists.php.net to get a copy of this message | ||
Edit report at https://bugs.php.net/bug.php?id=60111&edit=1
ID: 60111
User updated by: digit6 at gmail dot com
Reported by: digit6 at gmail dot com
Summary: JSON_NUMERIC_CHECK option mangles certain values
-Status: Feedback
+Status: Closed
Type: Bug
Package: JSON related
Operating System: FreeBSD
PHP Version: 5.3.8
Block user comment: N
Private report: N
New Comment:
^^ You are actually right on this. I was not taking into account that JSON_NUMERIC_CHECK's
actual purpose is to look for strings of numeric values and automatically convert them to int
values. In my example of forcing a string type on the numeric string, would still require
NUMERIC_CHECK to reformat the var type.
I was simply using JSON_NUMERIC_CHECK to ensure all my number values were integers, the fact that my
platform may use a long set of numbers with no alpha chars in a "tracking number" field
would break my implementation was not considered.
I'm closing the bug, I'll have to just make sure I'm forcing int values where I
require it manually.
Thanks!
Previous Comments:
------------------------------------------------------------------------
[2011-10-22 10:45:25] laruence@php.net
I think your are running in 32-bit os,
and I think it is not a bug, since the number value exceed the PHP_INT_MAX.
------------------------------------------------------------------------
[2011-10-22 00:44:40] digit6 at gmail dot com
I would further like to add that even if I FORCE the numeric string to be of a string type in the
array before passing it to json_encode(), the encode still treats the string encapsulated number as
a LONG and not as a string.
There is definitely a bug here.
------------------------------------------------------------------------
[2011-10-22 00:17:18] digit6 at gmail dot com
Incorrect ACTUAL output entered in bug, here is the real actual output:
{"test":3.43434343434e+15}
------------------------------------------------------------------------
[2011-10-21 22:56:05] digit6 at gmail dot com
Description:
------------
json_encode will produce undesired results when used with JSON_NUMERIC_CHECK when one or more values
is longer than 12 digits, ex: 3434343434343434. The resulting JSON encoded string has the above
value listed as: 3434343434340000.
Removing the JSON_NUMERIC_CHECK option fixes the problem, but then all other numeric values are
returned as strings rather than integers.
Test script:
---------------
$test = array("test"=>3434343434343434);
$test = json_encode($test, JSON_NUMERIC_CHECK);
echo $test;
Expected result:
----------------
{"test":3434343434343434}
OR
{"test":"3434343434343434"}
Actual result:
--------------
{"test":3434343434340000}
------------------------------------------------------------------------
--
Edit this bug report at https://bugs.php.net/bug.php?id=60111&edit=1