json decode

时间:2017-07-24 08:29:21

标签: javascript php arrays json ajax

我发送php数组作为json格式,但我无法解码该值。 以下是我制作数组的方法

    $ads = $atts['ads'];
    if (sizeof($ads) > 0) {
    foreach($ads as $social_item) {
        $sdbr = $social_item['sidebar'];
        $pno = $social_item['no'];
        $out[$sdbr] = $pno;
    }
}

哪个输出

array (
  'Full width ad 1' => 2,
  'sidebar-1' => 3,
)

现在我有json编码

$myJSON = json_encode($out);

json格式化值{"Full width ad 1":2,"sidebar-1":3} 然后我通过数据属性值

传递它
echo "<div data-ad = '$myJSON' class='ash_loadmore'><span>LOAD MORE</span>
</div>";

我得到了

$ad = $_POST['ad'];
array (
  'Full width ad 1' => '2',
  'sidebar-1' => '3',
)

现在是解码输出的时间

    $out = json_decode($ad,TRUE);
    var_dump($out); // Returns NULL although the array value is present

但是如果我把json格式的数据放得很好

    $out = json_decode('{"Full width ad 1":2,"sidebar-1":3}',TRUE);
    var_dump($out);

我怀疑在json编码之前,数组array(2) { ["Full width ad 1"]=> int(2) ["sidebar-1"]=> int(3) }的值是int,但我的值是string array(2) { ["Full width ad 1"]=> string(1) "2" ["sidebar-1"]=> string(1) "3" }

我做错了什么?

2 个答案:

答案 0 :(得分:4)

完成此步骤后:

$ad = $_POST['ad'];
array (
  'Full width ad 1' => '2',
  'sidebar-1' => '3',
)

你在输出中看到这已经是一个php数组了,所以任何json-decode方法都会失败(这不是json)。

您可以根据自己的需要立即使用阵列;)

答案 1 :(得分:1)

我认为将序列化的JSON放在html属性中可能会导致问题。

它可能导致问题的原因是因为您的JSON可能包含'等字符,并且它是您的输出,因此它可能会破坏您的HTML语法。

我猜你是通过AJAX将JSON发送回一些PHP脚本,因此从损坏的HTML元素中读取JSON可能会获取无效的JSON数据。

解决此问题的方法是使用...

$myJSON = htmlentities($str, ENT_QUOTES);

...然后将其输出为HTML。这将只编码引号字符。

您还应该使用...

在PHP端点上对其进行解码
$ad = html_entity_decode($ad, ENT_QUOTES);
$out = json_decode($ad,TRUE);

希望这有帮助。