2012-06-06 4 views
1

У меня есть массив как это:JSON Encode и Decode

Array (
    [utm_source] => website 
    [utm_medium] => fbshare 
    [utm_campaign] => camp1 
    [test_cat] => red 
    [test_sub] => Category 
    [test_ref] => rjdepe 
) 

который я json_encode и поместить в печенье. Я беру его из файла cookie и теперь хочу его декодировать, но я получаю пустой экран. Я путаюсь, что не так. Для меня этот JSON выглядит правильно:

{"utm_source":"website","utm_medium":"fbshare","utm_campaign":"camp1","test_cat":"red","test_sub":"Category","test_ref":"dodere"} 

Любые идеи?

Edit:

Мой код:

$value = array(
    'utm_source' => 'website', 
    'utm_medium' => 'fbshare', 
    'utm_campaign' => 'camp1', 
    'test_cat' => 'red', 
    'test_sub' => 'Category', 
    'test_ref' => 'rjdepe' 
); 
$value = json_encode($value); 
setcookie("TestCookie", $value, time()+3600); 

Другие страницы:

$cookie = $_COOKIE['TestCookie']; 
$cookie = json_decode($cookie); 
print_r($cookie); 
+3

Как мы должны угадать ваш ** ** точный код? – zerkms

+0

@dqlopez: это результат 'print_r' – zerkms

+0

Показать код, как вы это сделали? – xdazz

ответ

7

Попробуйте base64_encoding его, как, например:

$value = array(
    'utm_source' => 'website', 
    'utm_medium' => 'fbshare', 
    'utm_campaign' => 'camp1', 
    'test_cat' => 'red', 
    'test_sub' => 'Category', 
    'test_ref' => 'rjdepe' 
); 
$value = base64_encode(json_encode($value)); 
setcookie("TestCookie", $value, time()+3600); 

Другие страницы:

$cookie = $_COOKIE['TestCookie']; 
$cookie = json_decode(base64_decode($cookie)); 
print_r($cookie); 
1

Прежде чем ваш:

print_r($cookie); 

Do:

json_last_error(); 

Он что-то возвращает? Если вы получаете пустой экран, это может быть из-за сбоя парсера, вероятно, результаты " в строке json внутри файла cookie будут экранированы \". Try:

$cookie = json_decode(stripslashes($_COOKIE['TestCookie'])); 

Update

Таким образом, я использовал следующий код, и получил следующий результат:

$value = array(
     'utm_source' => 'website', 
     'utm_medium' => 'fbshare', 
     'utm_campaign' => 'camp1', 
     'test_cat' => 'red', 
     'test_sub' => 'Category', 
     'test_ref' => 'rjdepe' 
    ); 

    var_dump($value); 

    setcookie('TestCookie', json_encode($value), time()+86400); 

    echo $_COOKIE['TestCookie']; 

    print_r(json_decode($_COOKIE['TestCookie'])); 

Выход

array(6) { 
    ["utm_source"]=> 
     string(7) "website" 
    ["utm_medium"]=> 
     string(7) "fbshare" 
    ["utm_campaign"]=> 
     string(5) "camp1" 
    ["test_cat"]=> 
     string(3) "red" 
    ["test_sub"]=> 
     string(8) "Category" 
    ["test_ref"]=> 
     string(6) "rjdepe" 
} 

{ 
    "utm_source":"website", 
    "utm_medium":"fbshare", 
    "utm_campaign":"camp1", 
    "test_cat":"red", 
    "test_sub":"Category", 
    "test_ref":"rjdepe" 
} 

stdClass Object 
(
    [utm_source] => website 
    [utm_medium] => fbshare 
    [utm_campaign] => camp1 
    [test_cat] => red 
    [test_sub] => Category 
    [test_ref] => rjdepe 
) 

Если вы уведомление, закодированное - это массив. Строка json - это строка. Декодированная строка является объектом.

Вы можете печатать закинуть в массив:

$value = (array) json_decode($_COOKIE['TestCookie']); 
// Or 
$value = json_decode($_COOKIE['TestCookie'], true); 

Кроме того,

В зависимости от конфигурации, PHP может экранировать специальные символы в печенье, который, кажется, что ваша ошибка JSON декодирования является ретрансляция.

Try делает:

json_decode(str_replace('\"', '"', $_COOKIE['TestCookie']), true); 
+0

Я получаю 4 = JSON_ERROR_SYNTAX, когда я делаю json_last_error(); Я пробовал то, что вы мне дали, но 'strip_slashes' не работает, вы имели в виду' stripslashes'? – cKendrick

+0

Я пытался декодировать данные, когда он не является файлом cookie, и, кажется, декодирует его, но если я вытащил его из файла cookie, он не работает. – cKendrick

+0

Отредактированный мой ответ, см. Выше –