2015-01-15 2 views
0

ПОЛНОСТЬЮ переиздан ВОПРОСJSON Ошибка синтаксиса при использовании спасся слэши

<?php 
    $s1 = '{"req":"auth","token":"1234567\/\\"}'; // this seems to be valid, isn't it? 
    $s2 = '{"req":"auth","token":"123456\/\\7"}'; // this seems to be valid, isn't it? 
    $s3 = '{"req":"auth","token":"123456789"}'; 

    print_r(json_decode($s1,true)); 
    echo " - ERRORCODE FOR CASE#1 IS:" . json_last_error() . '<br />'; 

    print_r(json_decode($s2,true)); 
    echo " - ERRORCODE FOR CASE#2 IS:" . json_last_error() . '<br />'; 

    print_r(json_decode($s3,true)); 
    echo " - ERRORCODE FOR CASE#3 IS:" . json_last_error() . '<br />'; 
?> 

РЕЗУЛЬТАТЫ:

- ERRORCODE FOR CASE#1 IS:4 
- ERRORCODE FOR CASE#2 IS:4 
Array ([req] => auth [token] => 123456789) - ERRORCODE FOR CASE#3 IS:0 

ВОПРОС:

Почему s1 и s2 не работают, и как почини это?

+2

Проблема, вероятно, имеет отношение к тому, как вы получаете JSON в PHP, который не является частью кода, который вы поделили. – Quentin

+0

Отредактировано, чтобы убрать ваши сомнения. –

+0

, пожалуйста, поделитесь своей кодовой базой для получения дополнительной информации. – harry

ответ

1

Я собираюсь предположить, что вы тестирование материала здесь, поэтому имея:

$test_json = '{"req":"auth","token":"1234567\/\\"}'; 

Хотя одиночные кавычки делают игнорировать такие вещи, как \n, \\ по-прежнему рассматривается как один обратный слеш. Это означает, что ваш итоговый JSON:

{"red":"auth","token":"1234567\/\"} 

Который, само собой разумеется, является синтаксической ошибкой.

Если вы получаете ваш JSON от внешнего источника, вам не нужно беспокоиться об этом, но если вы проверяете с закодированным строки JSON, вам нужно:

$test_json = '{"req":"auth","token":"1234567\/\\\\"}'; 
+0

Пожалуйста, проверьте мои изменения, кажется, что это не так. –

+0

@FlashThunder ... Мой ответ очень точно описывает то, что вы видите. –

0

Вы должны вызвать функцию stripslashes перед json_decode, то есть добавить ниже 2 строк до первого print_r, чтобы он декодировал и печатает правильный массив.

$s1 = stripslashes($s1); 
$s2 = stripslashes($s2); 
Смежные вопросы