json_decode到数组,不工作

时间:2011-10-31 03:22:49

标签: php jquery ajax json

我有这个变量$a

var_dump($a)

 array(3) { [0]=> string(10) "designer" [1]=> string(8) "director" [2]=> string(10) "Freelancer"} 

我发送的是ajax(jquery)

jquery的

  data: 'form=<?php echo json_encode($a); ?>',

在我正在做的其他php文件中

$send = $_POST[form];

$b = json_encode($send);

$c = json_decode($b, true);
var_dump($c);

输出将是:

string(xx) "[\"designer\",\"director\",\"Freelancer\"]" 

但是,echo $c[0]显示:[并且应该是“designer

任何帮助?

编辑:已经尝试过了

$send = $_POST['form'];

$c = json_decode($send, true);

var_dump($c);

output: `null`

2 个答案:

答案 0 :(得分:2)

因为$c实际上是字符串“[\”designer \“,\”director \“,\”Freelancer \“]”,而不是数组["designer", "director", "Freelancer"]。您似乎在内容上json_encode两次,json_decode一次。

  1. form=<?php echo json_encode($a); ?>会对您的内容进行一次编码, 在通过电线发送之前。
  2. $send = $_POST[form];将获得该内容(已经 json_encoded)。
  3. $b = json_encode($send);将每秒编码相同的内容 时间。
  4. $c = json_decode($b, true);将对其进行解码。
  5. 这将使您的内容仍然编码。我不太确定第3步的重点是什么,在我看来删除它应该可以解决你的问题。

    编辑:

    由于您已经更新了问题,如果您尝试使用提议的解决方案,则会获得null,根据PHP documentation for json_decode

      

    如果无法解码json或编码数据,则返回NULL   比递归限制更深。

    你应该确保数据设置正是你想要的,因为在这种情况下我认为你的递归水平不是太深(根据你给出的数据,似乎没有任何一个) )。

答案 1 :(得分:0)

$_POST[form]已经是JSON编码的字符串。如果再次对其进行编码,然后对其进行解码,则最终会得到相同的字符串,而不是数组。您不需要$b = json_encode($send)

看起来你也有魔术行情。关闭它们或按照文档清理字符串:http://www.php.net/magic_quotes

另外,引用您的数组索引!

$send = $_POST['form'];

http://www.php.net/manual/en/language.types.array.php#language.types.array.donts