Строка ответа JSON оканчивается на "ноль"

И в Postman, и в JQuery я получаю ответы в форме

{"key1": "value1", "key2": "value2"}null

Этот завершающий ноль мешает всему, что пытается проанализировать его на стороне клиента, и я не могу понять, откуда это происходит. Если я error_log закодированный JSON перед echoВ нём нет завершающего нуля, поэтому я предполагаю, что это терминатор строки, но я не думал, что PHP использует строки с нулевым символом в конце. Как мне избавиться от этих нулей?

Кодируемый и возвращаемый объект:

public function jsonSerialize()
{
    return [
        'internal_id' => $this->internal_id, //int
        'friendly_name' => $this->friendly_name, //string
        'external_id' => $this->external_id, //string
        'picture' => $this->picture //string
    ];
}

Фактическое возвращение просто echo(json_encode($retval));

4 ответа

Решение

После того, как файл PHP был выполнен, вы должны выйти вручную или вернуться вместо эхо, в противном случае он вернется NULL неявно и все испортить. Урок выучен.

Вот некоторый код в дополнение к правильному ответу Кенни, указанному выше. Это предотвращает вывод 0 или NULL в конце json:

«После выполнения PHP-файла вам придется выйти вручную или вернуться вместо эха, иначе он неявно вернет NULL и все испортит. Урок усвоен».

      ob_clean(); // Clears the output buffer to remove unexpected characters
echo json_encode($array);
exit(); // Terminates the script to prevent further output

Я получаю эту ошибку из-за вызова AJAX PHP-скрипта, когда вы используете его для отправки данных обратно во внешний интерфейс.

Чтобы завершить PHP-скрипт, в котором выecho, вам придется убить скрипт, используяdieиexitи некоторые случаиreturnвот так

      $arrayToJsonData = ["some", "array", "result"];  
echo(json_encode($arrayToJsonData));
//Kill the script here by using die or exit
die;

Не самый элегантный, наверное... но это меня СПАСИЛО:

function removeTrailingNulls(__str){
    var sanitized = __str;
    var lastCharIndex = sanitized.length - 1;
    var lastChar = sanitized[lastCharIndex];
    var lastCharCode = lastChar.charCodeAt(0);
    var isWeirdNullSpace = lastCharCode === 0; 
    console.log('checking last char (' + lastChar + ') code: ' + lastCharCode + '...null space end?' + isWeirdNullSpace);
    var loopCount = 0;
    while(isWeirdNullSpace){
        sanitized = sanitized.substring(0, sanitized.length-1);
        lastChar = sanitized[sanitized.length-1];
        lastCharCode = lastChar.charCodeAt(0);
        isWeirdNullSpace = lastCharCode === 0;              
        loopCount++;
        if(loopCount>100) break; // prevent infinite loops just in case.
    }
    return String(sanitized);
}
Другие вопросы по тегам