猿问

json_decode 显示没有数据

我正在使用以下逻辑使用 PHP 在 MySQL 中以 JSON 格式存储数据。


foreach ($_POST['data'] as $key => $value)

    {

        if($value[1] == "page_keywords")

            $store .= json_encode(array($value[1] => $value[2]));

        else

            $store .= json_encode(array($value[1] => trim($value[2])));

    }


session_start();

$date = new Date();

$modified = $date->getDate();


$query = ' UPDATE pages SET last_updated_user_author_id = "'.$_SESSION['user_id'].'", data = "'.htmlentities($store, ENT_QUOTES).'", modified = "'.$modified.'" WHERE id = "'.$pageID.'" ';

然后在解码数据时我使用以下逻辑:


$query = ' SELECT data FROM pages WHERE id = "'.$_POST['pageID'].'" ';

$connection = $this->establish_connection();

$data = $connection->query($query);

$connection->close();

if($data->num_rows > 0)

    {

        while($row = $data->fetch_assoc())

            {

                $var = html_entity_decode($row['data']);

                echo json_decode($var);

            }

    }

虽然 json_decode 它没有显示任何数据作为响应,但当我执行 var_dump 时它显示为 null,但如果我没有执行 json_decode 并且仅使用 html_entity_decode() 我得到低于输出


{"page_base_url":"http://www.myblog.com/about/contact/"}{"page_url_revision":"http://www.myblog.com/about/contact/"}{"page_url_alternate":"http://www.myblog.com/about/contact/"}{"page_url_shortlink":"http://www.myblog.com/about/contact/"}{"page_url_canonical":"http://www.myblog.com/about/contact/"}{"page_title":"Example | Contact"}{"page_name":"Example Contact"}{"page_type":"WebSite"}{"page_meta_description":"Want to get in touch with us? You're on the correct page, you can get in touch with us by filling the form below. We will get in touch with you with 24 hours."}{"page_keywords":["example","contact","support","help","getintouch","feedback","bug","updates"]}

我不确定我要去哪里错了,有人可以在这里帮助我吗?


我想给出一个 json_encode 格式的 eccho 作为对 ajax 调用的响应。我使用下面的逻辑这样做


echo json_encode(

                array(

                        "type" => "error",

                        "status" => "Error While Retrieving Data!",

                        "message" => $error

                     )

            );


缥缈止盈
浏览 160回答 3
3回答

元芳怎么了

我认为你需要类似的东西:$store = array();foreach ($_POST['data'] as $key => $value)    {        if($value[1] == "page_keywords")            $store[] = array($value[1] => $value[2]);        else            $store[] = array($value[1] => trim($value[2]));    }$save = json_encode($store);甚至(如果您的 $value[1] 在循环中始终是唯一的)$store = array();foreach ($_POST['data'] as $key => $value)    {        if($value[1] == "page_keywords")            $store[$value[1]] = $value[2];        else            $store[$value[1]] = trim($value[2]);    }$save = json_encode($store);然后使用 $save 存储在您的表中。不过,我不是 100% 的。

摇曳的蔷薇

您显示的字符串不是有效的 JSON。如果您想以 JSON 格式存储类似的对象列表,则它们需要位于数组中,并用逗号分隔。否则,它们只是不相关的单个对象,不能被解码为单个 JSON 块。因此,您需要在 PHP 中构建一个数组,然后在最后对整个内容进行编码。像这样的东西:$storedata = array();foreach ($_POST['data'] as $key => $value){    if($value[1] == "page_keywords")        $storedata[] = array($value[1] => $value[2]);    else        $storedata[] = array($value[1] => trim($value[2]));}$jsondata = json_encode($storedata);然后$jsondata在你的 SQL 语句中使用。

素胚勾勒不出你

您的问题是您“保存”到数据库。您将每个键值对编码为自己的 json 字符串并连接这些 json 字符串。你的片段foreach ($_POST['data'] as $key => $value){    if($value[1] == "page_keywords")        $store .= json_encode(array($value[1] => $value[2]));    else        $store .= json_encode(array($value[1] => trim($value[2])));}产量$store = "{key1:value1}{key2:value3}{key3:value3}"。请注意所有的括号,您的字符串中有 3 个不同的 json 对象,其中包含一个键值对,而不是一个具有 3 个键值对的 json 对象。但是,我假设您想要一个带有键值对的单个 json 对象,结果如下所示?$store = "{    key1:value1,    key2:value2,    key3:value3}";如果是这样,您需要以不同的方式构建阵列:$store = array();foreach ($_POST['data'] as $key => $value){    if($value[1] == "page_keywords")        $store[$value[1]] = $value[2];    else        $store[$value[1]] = trim($value[2]);}请注意,为了每个人的安全,您的代码容易受到 sql-injections 的攻击。请也解决这个问题。
随时随地看视频慕课网APP
我要回答