2

我必须将 PHP 数组 json_encode 到 JavaScript 数组。不幸的是,如果我使用的 jQuery 库包含整数而不是字符串,它将无法正确处理该数组。

大多数情况下,这将生成仅包含字符串的正确数组:

json_encode($data)

即使$data只包含数字,我通常也会得到这个:

["3","7","8"]

但有时,我会得到这样的结果(注意零):

["9691","1792","26","1","4","15",0,"1"]

或这个

[16171,15470,10390,7585]

(注意,这显然是不同的数据来说明发生了什么)。我需要强制 json_encode 将数组值视为字符串。我知道有相反的选项 JSON_NUMERIC_CHECK 强制数字。等价物真的不存在吗?似乎我唯一的选择是在 JavaScript 端再次处理数组,这虽然可能在某种程度上破坏了我的对象的封装。

4

4 回答 4

5

在您的数组中将它们定义为字符串,或者如果它来自其他地方:

$data = json_encode(array_map('strval', $data));
于 2013-10-30T15:54:14.253 回答
5

如果有相反的情况会很好,JSON_NUMERIC_CHECK但看起来并不存在。

为什么在编码之前不能确保 php 中的数据类型正确?

这可能意味着您必须手动将其转换为字符串...

于 2013-10-30T15:50:15.597 回答
1

json_decode()如果在函数调用中指定标志,则可以将大整数转换为字符串:

$array = json_decode($json, true, 512, JSON_BIGINT_AS_STRING)
于 2013-10-30T16:06:22.180 回答
0

因为 没有相反的标志JSON_NUMERIC_CHECK,所以我为此创建了一个函数。
它接受一维和多维数组,并且可以添加条件来验证 te 数组的每个元素。

function JSON_NUMERIC_STRING($array){
    foreach($array as $key => &$value){
        if(is_array($value)){
            $value = iterateMA($value);
        }elseif(is_numeric($value)){
            $value = strval($value);
        }
        // add more conditions if needed...
    }
    return $array;
}

$array = JSON_NUMERIC_STRING($array);
于 2015-08-12T22:04:50.720 回答