2013-09-24 3 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". Работает отлично.

Теперь, вместо этого, я просто хочу получить доступ к клавише «страница» (который, как я знаю, будет там каждый раз), и не обращайте внимания ни на что другое.

Я думал, что это будет делать это, но она падает с «не может использовать объект типа 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"

ли это помощь?

Смежные вопросы