如何将Json解码为Array

时间:2015-09-22 13:00:05

标签: php json

我有一个这样的数组:

$templateStyleArr = array(
                      0 => array(
                            'text' => 'General Text',
                            'default_value' => '#444',
                            'scopval' => 'general',
                            ),
                      1 => array(
                            'text' => 'Accent Color',
                            'default_value' => '#c91a1a',
                            'scopval' => 'Accent',
                            ),      
                      2 => array(
                            'text' => 'Button Hover',
                            'default_value' => '#2ec72e',
                            'scopval' => 'dark_btn_hover',
                            ),      
                      3 => array(
                            'text' => 'Button Text',
                            'default_value' => '#3300f5',
                            'scopval' => 'btn_txt',
                            ),  
                        )

我想使用PHP将此数组保存为Json格式的数据库。我正在使用json_encode函数。         Json保存得很完美。问题是当我尝试解码保存的json(使用json_decode)时,我没有得到上面的数组。

3 个答案:

答案 0 :(得分:2)

参考the manual,您可能需要将assoc参数设置为TRUE,以便将返回的对象转换为关联数组。

$array = json_decode($json_string_from_db, TRUE);

答案 1 :(得分:0)

如果您只想将数组存储为数据库中的字符串,可以尝试serialize(),通过反序列化,您将获得与返回值完全相同的数组

$templateStyleArr = array(
    0 => array(
        'text' => 'General Text',
        'default_value' => '#444',
        'scopval' => 'general',
    ),
    1 => array(
        'text' => 'Accent Color',
        'default_value' => '#c91a1a',
        'scopval' => 'Accent',
    ),
    2 => array(
        'text' => 'Button Hover',
        'default_value' => '#2ec72e',
        'scopval' => 'dark_btn_hover',
    ),
    3 => array(
        'text' => 'Button Text',
        'default_value' => '#3300f5',
        'scopval' => 'btn_txt',
    ),
);

$string = serialize( $templateStyleArr );
var_dump( unserialize( $string ) );

如果数组索引实际上只是数字,你可以使用它:

$string = json_encode( $templateStyleArr );
$arrayFromJson = json_decode( $string );

foreach( $arrayFromJson as $index => $jsonObject ) {
    // cast object to array
    $arrayFromJson[$index] = (array) $jsonObject;
}

var_dump( $arrayFromJson );

答案 2 :(得分:-1)

基本上你的json编码会在解码时将数组转换为对象,所以你需要创建函数来生成对象到数组,你应该尝试这个函数将转换正确的

function to_array( $object ){
    if( !is_object( $object ) && !is_array( $object ) ){
        return $object;
    }
    if( is_object( $object ) ){
        $object = get_object_vars( $object );
    }
    return array_map( 'to_array', $object );
}

$array = to_array( json_decode($fromdb) );

print_r( $array );

它的工作对我来说没问题,所以试试吧:)。