Php json将所有值解码为字符串

时间:2014-01-13 07:34:52

标签: php json

我正在尝试2天已经解码了json字符串,我使用了json_decode但是这不会按照我的意愿去做,我想以这样的方式对其进行解码,以便所有值都是字符串之后。我从一个Web服务接收一个巨大的json,它包含字符串,bool和整数,当我在php中进行解码时,我希望它们都是字符串,例如,我得到一个像100的int,转换后我想要它“ 100“,或者我得到一个假,转换后我想要它”假“,我想制作一个脚本来扫描使用json_decode后产生的obj数组并将它们转换为字符串但我工作的公司不喜欢那个想法,有人可以帮助我吗?或者给我一个提示?

2 个答案:

答案 0 :(得分:1)

尝试使用array_walk_recursive将每个值转换为字符串,如下所示:

<?php
$fruits = json_encode ( 
        array (
                'sweet' => array (
                        'a' => 1,
                        'b' => false,
                        'c' => null 
                ),
                'sour' => 'lemon' 
        ) );

$fruits = json_decode ( $fruits, true );

array_walk_recursive ( $fruits, 

        function (&$item, $key)
        {
            if ($item === true || $item === false)
            {
                $item = $item ? 'true' : 'false';
            }
            else if ($item === null)
            {
                $item = 'null';
            }
            else
            {
                $item = ( string ) $item;
            }
        } );

var_dump ( $fruits );

<击>

<击>
    <?php
    $fruits = json_encode (
            array (
                    'sweet' => array (
                            'a' => 1,
                            'b' => false
                    ),
                    'sour' => 'lemon'
            ) );

    $fruits = json_decode ( $fruits, true );

    function convertToString(&$item, $key)
    {
        if ($item === true || $item === false)
        {
            $item = $item ? 'true' : 'false';
        }
        else
        {
            $item =  ( string ) $item;
        }
    }

    array_walk_recursive ( $fruits, 'convertToString' );

    var_dump ( $fruits );

<击>

答案 1 :(得分:1)

你无法用json_decode获取字符串。您应该找到一些具有该功能的json库,或者创建一个自定义解析器。

另一种方法是遍历结果数组并更新值。 E.g。

$arr = array(1=>true, 2=>false, 5=>5, 4 =>null, 3=>array(1=>"true", 2=>false));
var_dump($arr);
function update_value(&$item,$key) {
    if ($item === null) $item = "null";
    elseif ($item === false) $item = "false";
    elseif ($item === true) $item = "true";
    else $item.="";
    // ... so on
}
array_walk_recursive($arr,'update_value');
var_dump($arr);