【问题标题】:php multidimensional array encode and decode jsonphp多维数组编解码json
【发布时间】:2013-03-10 13:17:17
【问题描述】:

我有一个数组,我将其编码为 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

【问题讨论】:

  • 如果没有正确的 's,您的 php 复制和粘贴似乎在语法上被破坏了。
  • var_dump($json); 以确保它确实是您要解码的字符串
  • 我已经在这 2 个小时上了,现在我的神经已经松了
  • var_dump json 从数据库中取出后
  • 这不是您编辑后的有效 json。如果您在解码之前使用stripslashes,请不要这样做。如果不是问题,请使用 Adminer 或 phpMyAdmin 或任何其他数据库管理工具来验证该字段是否包含正确的转义引号,这会导致插入数据库的方法错误或服务器配置错误

标签: php arrays json


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    您是否尝试过使用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
            )
    
    )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-08-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-17
      • 1970-01-01
      相关资源
      最近更新 更多