JSON响应字符串以“null”结尾

y0u0uwnf  于 2023-04-08  发布在  其他
关注(0)|答案(4)|浏览(162)

在Postman和jQuery中,我都得到了如下形式的响应

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

这个尾随的null会干扰客户端解析它的任何东西,我不知道它是从哪里来的。如果我在echo之前error_log编码的JSON,没有尾随的null,所以我假设它是一个字符串结束符,但我不认为PHP使用以null结尾的字符串。我如何摆脱这些null?
正在编码并返回的对象:

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
    ];
}

实际的return语句就是echo(json_encode($retval));

13z8s7eq

13z8s7eq1#

一旦PHP文件执行完毕,你必须手动退出或者返回,而不是回显,否则它会隐式返回NULL,把一切都搞砸。

a14dhokn

a14dhokn2#

也许不是最好的,但它拯救了我:

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);
}
zed5wv10

zed5wv103#

下面是Kenny给出的正确答案之外的一些代码。这可以防止在json末尾输出0或NULL:
“一旦PHP文件执行完毕,您必须手动退出或返回,而不是回显,否则它将隐式返回NULL,并将一切都搞砸。”

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

pdkcd3nj4#

当您使用echo将数据发送回前端时,我从对PHP脚本的 AJAX 调用中得到了这个错误。
要在echo终止PHP脚本,必须使用dieexit以及某些情况下的return终止脚本,如下所示

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

相关问题