2013-10-30 36 views
2

我必须将PHP数组json_encode编码为JavaScript数组。不幸的是,我使用的jQuery库如果包含ints而不是字符串,将无法正确处理该数组。强制json_encode创建字符串

大部分的时间,这将产生适当的阵列只包含字符串:

json_encode($data) 

即使$数据只包含数字,我通常会得到这样

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

虽然有时,我得到的结果像这样(注意零):

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

or this

[16171,15470,10390,7585] 

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

+0

也许这个[链接](http://stackoverflow.com/questions/1390983/php-json-encode-encoding-numbers-as-strings)可以提供帮助。问候 ! – user12733

+0

@Tino与我想要的相反,如前所述 – janb

+1

“*不幸的是,我使用的jQuery库将不会正确地处理该数组,如果它包含ints而不是字符串*”....如果它们实际上是数字,那么我会说这是你的jQuery库的错误。但是,为什么不把它们作为字符串转换成字符串呢? – Spudley

回答

3

这将是很好,如果有相反的JSON_NUMERIC_CHECK但它看起来不像。

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

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

+0

你说得对,我确实可以这么做。我试图避免它,因为我想两次使用相同的数组,一次使用JSON_NUMERIC_CHECK(作为数据数组)并且一次强制作为字符串(用于所述数据的工具提示)。这意味着我现在必须添加一个额外的循环和一个新的数组。我宁愿不要像那样膨胀我的代码。啊,这是一个解决方案。 – janb

3

它们定义你的数组作为字符串,或者如果它是从别的地方来:

$data = json_encode(array_map('strval', $data)); 
+0

谢谢,这是一个很好的方式来做到这一点,我真的没有想到:) – janb

0

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

$array = json_decode($json, true, 512, JSON_BIGINT_AS_STRING) 
+0

不是一个选项,因为我根本不解码它们。我构建了一个通过$ .getJSON()获取的JSON字符串,然后直接传递给jQuery库 – janb

0

由于没有对相反的标志3210,我为此创建了一个函数。
它接受一维和多维数组,并且可以添加条件来验证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);