为了账号安全,请及时绑定邮箱和手机立即绑定

json_decode 显示没有数据

json_decode 显示没有数据

PHP
缥缈止盈 2022-10-28 16:33:14
我正在使用以下逻辑使用 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                     )            );
查看完整描述

3 回答

?
元芳怎么了

TA贡献1798条经验 获得超7个赞

我认为你需要类似的东西:


$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% 的。


查看完整回答
反对 回复 2022-10-28
?
摇曳的蔷薇

TA贡献1793条经验 获得超6个赞

您显示的字符串不是有效的 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 语句中使用。


查看完整回答
反对 回复 2022-10-28
?
素胚勾勒不出你

TA贡献1827条经验 获得超9个赞

您的问题是您“保存”到数据库。您将每个键值对编码为自己的 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 的攻击。请也解决这个问题。


查看完整回答
反对 回复 2022-10-28
  • 3 回答
  • 0 关注
  • 159 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信