Php JSON响应字符串以“结束”;空";

Php JSON响应字符串以“结束”;空";,php,json,wordpress,rest,wordpress-plugin-creation,Php,Json,Wordpress,Rest,Wordpress Plugin Creation,在Postman和jQuery中,我都得到了以下表单中的响应 {"key1": "value1", "key2": "value2"}null 尾随的null会干扰任何试图在客户端解析它的东西,我不知道它是从哪里来的。如果我error\u log在echo对其进行加密之前对编码后的JSON进行记录,则不会出现尾随null,因此我假设它是一个字符串终止符,但我不认为PHP使用了以null结尾的字符串。我如何去除这些空值 正在编码和返回的对象: public function jsonSerial

在Postman和jQuery中,我都得到了以下表单中的响应

{"key1": "value1", "key2": "value2"}null
尾随的null会干扰任何试图在客户端解析它的东西,我不知道它是从哪里来的。如果我
error\u log
echo
对其进行加密之前对编码后的JSON进行记录,则不会出现尾随null,因此我假设它是一个字符串终止符,但我不认为PHP使用了以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
    ];
}

实际返回语句只是
echo(json_encode($retval))

一旦PHP文件执行完毕,您必须手动退出或返回而不是回显,否则它将隐式返回
NULL
,并将一切搞糟。吸取的教训。

可能不是最优雅的。。。但这救了我:

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

它不是字符串终止符,但PHP脚本中一定有某种东西在生成它。编写代码后,您是否还有第二个
json\u encode
调用?PHP的调试函数(var_dump/export)以大写形式显示null,因此不太可能是其中之一。我们可以看到输出JSON的代码吗?我添加了jsonSerialize方法。空值根本不显示在var_dump中。右大括号是字符串的最后一个字符。在echo(json_encode())之后执行的任何代码都必须生成“null”的输出。可能是var_dump()、print_r()或其他什么?如果不手动退出函数,它最终会隐式返回null。现在都修好了。