无法解析有效的JSON

5

我的API使用PHP Silex发送的JSON响应如下:

{"response":true,"message":"Bla","userId":"AAA"}

但是我无法在我的 TypeScript 前端解析它。
this.authService.login(body).then((result : any)  => {
    console.log(result.data); // => {"response":true,"message":"Bla","userId":"AAA"}         
    let parsed = JSON.parse(result.data);
    console.log(parsed.message); // => throws  "SyntaxError: Unexpected token in JSON at position 0\n at JSON.parse (<anonymous>)

我使用PHP和Silex框架创建的php端点:

$app->post('/user/login', function (Request $request) use ($app, $config) {
    $email = $request->request->get('user-email');
    $password = $request->request->get('user-password');
    $rsp = loginUser($email,$password);
    return $app->json($rsp);
});

当尝试将json对象硬编码到代码中时,它确实可以解析!

更新解决方案 我不得不对result.data使用trim()来删除空格,某些情况下响应会带有空格,JSON不喜欢那样。谢谢大家的帮助。


2
很可能是空格,使用trim()函数。 - Dieter Kräutl
console.log(typeof result.data); - Pointy
1
似乎数据已经被解析。 - Luca Kiebel
1
console.log(result.data.message) 显示什么? - Exterminator
@Pointy,result.data 的类型是字符串。 - Yassine
显示剩余9条评论
2个回答

3

解决方案

我使用了result.data.trim(),这样它才能正常工作,不知道为什么响应中有空格,JSON 不喜欢那样。


5
与其使用最终结果的清理工具,还不如确保从服务器(API输出)获得的输出干净。 - IncredibleHat

1

您的PHP代码中可能存在\u0000字符。

尝试在从PHP获取JSON字符串后立即删除这些字符:

this.authService.login(body).then((result : any)  => {
    string = result.data.replace("\u0000", "");
    string = string.replace("\\u0000", "");
    let parsed = JSON.parse(string);

为什么要双重替换?根据 OP 的控制台输出,他们的数据中显然没有字面字符串“\u0000”。然而,实际的空字符(或其他不可见的控制字符)是相当可能的。 - Ilmari Karonen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接