php多维数组编码和解码json

时间:2013-03-10 13:17:17

标签: php arrays json

我有一个数组,我编码为json,我将它保存到数据库。该数组看起来像

 $myarray = array(
    'test'=>array('key1'=>'1',
                  'key2'=>'2',
                  'key3'=>'3'),
    'test2' =>array('key4'=>'1',
                   'key5'=>'<a href="myclass"></a>'
                  )
     );
json_encode($myarray);

我数据库中保存的json看起来像

{

 "test":  {"key1":"1",
           "key2":"2",
           "key3":"3"
          },
 "test2": {"key4":"1",
           "key5":"<a href ="myclass"></a>"
           }
}

MYSQL保存 $sql = "UPDATE my_table SET params= '".json_encode($param )."' WHERE id ='“。$ key。”'“;

当我从数据库中检索json字符串并尝试使用json_decode($json, true);重建数组时输出null

2 个答案:

答案 0 :(得分:0)

您可以序列化数据,而不是将其存储为json。

$sql = "UPDATE table SET field='".serialize($myarray)."' WHERE ...";

然后,当您想要重新创建数组时,只需将其从表中拉出并反序列化()即可。它在数据库中不是人类可读的;但是这种技术很快,适用于在db中存储数组。如果你的js脚本需要数据,那么在你反序列化它之后json_encode()就可以了。

答案 1 :(得分:0)

您是否尝试过使用addslashes()stripslashes() php函数?

尝试: 要更新你的表格:

$sql = "UPDATE my_table SET params='".addslashes(json_encode($myarray))."' WHERE id ='".$key."';";

从表中读取:

$sql = "SELECT params FROM my_table WHERE id='".$key."';";
...code to read row...
$myparams = stripslashes($row['params']);

你也可以从php手册stripslashes_deep()尝试多维数组的自定义函数,参见http://www.php.net/manual/en/function.stripslashes.php(例2)

function stripslashes_deep($value)
{
    $value = is_array($value) ?
                array_map('stripslashes_deep', $value) :
                stripslashes($value);

    return $value;
}

// Example
$array = array("f\\'oo", "b\\'ar", array("fo\\'o", "b\\'ar"));
$array = stripslashes_deep($array);

print_r($array);

// Output    
Array
(
    [0] => f'oo
    [1] => b'ar
    [2] => Array
        (
            [0] => fo'o
            [1] => b'ar
        )

)