在PHP5.5中删除JSON_BIGINT_AS_字符串?

在PHP5.5中删除JSON_BIGINT_AS_字符串?,php,json,Php,Json,在我看来,在PHP5.5中,常量JSON\u BIGINT\u AS\u STRING似乎已从中删除 我使用PHP“5.5.3-1ubuntu2”(Ubuntu13.10),在从PHP 5.4(Ubuntu13.04)更新后出现此错误: 警告:json_decode():选项json_BIGINT_AS_字符串未在中实现 是否有任何证据表明这已被删除 编辑: 我不需要这个函数,所以我添加了这个常数: define('USE_JSON_BIGINT_AS_STRING',(!version_co

在我看来,在PHP5.5中,常量
JSON\u BIGINT\u AS\u STRING
似乎已从中删除

我使用PHP“5.5.3-1ubuntu2”(Ubuntu13.10),在从PHP 5.4(Ubuntu13.04)更新后出现此错误:

警告:json_decode():选项json_BIGINT_AS_字符串未在中实现

是否有任何证据表明这已被删除


编辑:

我不需要这个函数,所以我添加了这个常数:

define('USE_JSON_BIGINT_AS_STRING',(!version_compare(PHP_VERSION,'5.5', '>=') and defined('JSON_BIGINT_AS_STRING')));
无论我在哪里使用json_decode(),我都会使用:

if(USE_JSON_BIGINT_AS_STRING) $j= json_decode($json ,true, 512, JSON_BIGINT_AS_STRING );
else $j=  json_decode($json,true );
由于许可证问题,某些Linux发行版似乎出现了这种情况,您使用的是受影响的


我的建议是使用较新版本的模块。

如前所述,此错误似乎来自错误版本的pecl-json-c,由于许可问题,Ubuntu将其打包为php5 json的别名

多亏了这个项目,我找到了一个解决办法,就是检查pecl-JSON-C设置的
JSON\u C\u VERSION
常量,而不是
将\u JSON\u BIGINT\u用作\u字符串。(因为定义了字符串,但没有实现,所以
使用了JSON\u BIGINT\u)

以下是来自的代码:


changelog中似乎没有关于这个的任何信息,所以我假设它可能是一个bug……我正在运行
PHP5.5.1-1~dotdeb.1
,它确实支持常量,因此如果它被删除,它必须是在5.5.2或5.5.3版本中。是的,有一个新的免费JSON扩展。我不建议使用旧的。请与开发人员联系。有人有相关模块的链接吗?如果在一个大字符串中,文本中有一个大的数字,这难道不会给出错误吗?。正则表达式应该只包含仍然“在”qoutesI之外的数字。我不能因为编写这个正则表达式而获得荣誉-但是再看一看,它有一个错误:如果一个长整数在一个字符串中,并且跟在“:”之后,它将被引用(即使它已经在一个带引号的字符串中)。不过,它不会在字符串中引用长整数。也许当我有时间的时候,我会用一个奇特的正则表达式,它只匹配无引号的长整数。这个正则表达式打破了Twitter上的一些回应。想提供一个改进的版本吗?
<?php
if (version_compare(PHP_VERSION, '5.4.0', '>=') && !(defined('JSON_C_VERSION') && PHP_INT_SIZE > 4)) {
    /** In PHP >=5.4.0, json_decode() accepts an options parameter, that allows you
     * to specify that large ints (like Steam Transaction IDs) should be treated as
     * strings, rather than the PHP default behaviour of converting them to floats.
     */
    $obj = json_decode($input, false, 512, JSON_BIGINT_AS_STRING);
} else {
    /** Not all servers will support that, however, so for older versions we must
     * manually detect large ints in the JSON string and quote them (thus converting
     *them to strings) before decoding, hence the preg_replace() call.
     */
    $max_int_length = strlen((string) PHP_INT_MAX) - 1;
    $json_without_bigints = preg_replace('/:\s*(-?\d{'.$max_int_length.',})/', ': "$1"', $input);
    $obj = json_decode($json_without_bigints);
}