2013-09-24 22 views
2

我知道这是我的语法,但找不到问题。在php失败时获取已知密钥的值

我通常使用一个循环来把任何JSON键进入变量是这样的:

发送JSON: [{\"name\":\"dolly\",\"page\":\"A4\"}]

$object = json_decode(stripslashes($_POST['myData'])); 

foreach ($object[0] as $key => $value) 
{ 
    $$key = preg_replace('/--+/',' ',$value); 
} 

所以现在,例如,我有$页= “A4”。工作正常。

现在,我不想像这样循环,我只想访问'page'键(我知道每次都会在那里)并忽略其他任何内容。

我认为这将做到这一点,但它与“不能使用类型为stdClass的对象作为排序”倒了:

$object = json_decode(stripslashes($_POST['myData'])); 

$page = $object[0]['page']; 

这不报错了,但它没有返回值:

$object = json_decode($_POST['myData']); 

$p = $object[0]->page; 

一样

$p = $object->page; 

什么我搞砸了这里?

感谢您的关注。

+1

var_dump($ object)'的输出是什么? – Kjir

+0

为什么你的JSON在引号前有斜杠?这不是有效的JSON。 – Barmar

+0

@Barmar它来自POST请求,所以PHP会自动添加它们,并且有一个'stripslashes'调用来删除它们。 – Pietu1998

回答

1

你需要结合您的方法;-)

$object = json_decode(stripslashes($_POST['myData'])); // note the stripslashes() here! 
$p = $object[0]->page; 

作为编码的对象是一个数组,你需要为你在你的第二个片段做得到的第一个元素,然后将对象属性码。您忘记了应用stripslashes(),因此json_decode()失败。

+0

谢谢你们 - 结束了几个小时的挫折! – Shaun

2

这似乎对我很好吗?

$a='[{\"name\":\"dolly\",\"page\":\"A4\"}]'; 
$o=json_decode(stripslashes($a)); 
var_dump($o[0]->page); 

字符串(2) “A4”

这是否帮助?