Невозможно проанализировать действительный JSON - PullRequest
0 голосов
/ 03 сентября 2018

Мой API отправляет ответ JSON, как это, используя PHP Silex:

{"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 с использованием PHP и Silex Framework:

$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 в код, он выполняет синтаксический анализ!

ОБНОВЛЕНИЕ РЕШЕНИЯ Я должен был использовать trim () для result.data, чтобы удалить пробелы, кому-то ответ пришел с пробелами, и JSON это не понравилось. Спасибо всем за помощь.

Ответы [ 2 ]

0 голосов
/ 03 сентября 2018

РЕШЕНИЕ

Я использовал result.data.trim (), чтобы он работал, каким-то образом в ответе были пробелы, и JSON это не понравилось.

0 голосов
/ 03 сентября 2018

У вас может быть символ \u0000 где-то из вашего PHP-кода.

Попробуйте удалить эти символы из строки JSON, как только вы получите их из PHP:

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