引号中的数字使用json_encode()

时间:2014-06-23 11:53:20

标签: php json

各种第三方公司正在迫使我们使用非传统代码并产生非标准输出。

我们使用标准json_encode()在JS / HTML中输出JSON变量,如下所示:

"custom":{"1":2,"2":7,"3":5}

现在他们告诉我们这不适合他们,他们需要这样:

"custom":{"1":"2","2":"7","3":"5"}

我可以强制PHP将引号括起来吗?在编码之前构建对象时可能使用强制转换(string)

主要是,我们需要与以下选项bitflag相反:

JSON_NUMERIC_CHECK (integer)

Encodes numeric strings as numbers. Available since PHP 5.3.3.

但我怀疑这是否存在。

3 个答案:

答案 0 :(得分:3)

猜猜你需要自己解决这个问题。我想不出内置函数,但你可以编写自己的函数:

function stringify_numbers($obj) {
    foreach($obj as &$item)
        if(is_object($item) || is_array($item))
            $item = stringify_numbers($item); // recurse!
        if(is_numeric($item)
            $item = (string)$item;
    return $obj;
}

现在您可以使用json_encode(stringify_numbers($yourObject))

答案 1 :(得分:2)

如果您是从数组构建数据,则可以使用

array_map('strval', $data);

// upd

可能你需要称之为递归。

答案 2 :(得分:2)

使用(string)投射属性似乎有效。

$custom = array(
    '1' => (string)$property,
    // ...
);