Ошибка при попытке извлечь данные из JSON - PullRequest
0 голосов
/ 22 января 2020

Я это JSON как input_data:

{"product":["1\/4 Page Ad (Amount: 25.00 USD, Quantity: 1)"],"currency":"USD","total":"25.00","transactionID":"34444622CG671084E","transactionFee":"1.03","transactionFeeCurrency":null,"payerName":"Laurence J Lafleur","payerEmail":"lafleur.julien@gmail.com","fullname":"Laurence J Lafleur","email":"lafleur.julien@gmail.com","transactionid":"34444622CG671084E","shiptoname":"Laurence J Lafleur","addr":"8 East Street ","city":"NATICK","state":"MA","postal":"01760","country":"US"}

И я пытаюсь извлечь информацию из поля product: 1/4 Page Ad (Amount: 25.00 USD, Quantity: 1)

Мой код выглядит так this:

var myvar = JSON.parse(input_data)
var myret = myvar.product
return myret

Я получаю следующую ошибку: "SyntaxError: Unexpected token o in JSON at position 1"

Буду благодарен за указатели, общие недостающие понятия и т. д. c.

С благодарностью

Жюльен

1 Ответ

0 голосов
/ 22 января 2020

Ну, есть две вещи не так.

  • Начиная с SyntaxError: Unexpected token o in JSON at position 1: вы получаете это, потому что вы не используете JSON.parse на string, вы используете JSON.parse на object; под капотом JSON.parse попытается создать строку из введенного вами ввода, если ввод не является строкой, поэтому {}.toString() === '[object Object]', вы в основном запускаете JSON.parse('[object Object]'), что недопустимо JSON (просто посмотрите на второй символ или символ в позиции 1, это «о», а не строка, логическое значение, объект, массив или число)

  • Вторая проблема заключается в том, что myvar.product - это массив, вы ожидаете получить то, что внутри массива, а не сам массив. Вам нужно вернуть myvar.product[0]

Попробуйте это:

function test(){
    var data = '{"product":["1\/4 Page Ad (Amount: 25.00 USD, Quantity: 1)"],"currency":"USD","total":"25.00","transactionID":"34444622CG671084E","transactionFee":"1.03","transactionFeeCurrency":null,"payerName":"Laurence J Lafleur","payerEmail":"lafleur.julien@gmail.com","fullname":"Laurence J Lafleur","email":"lafleur.julien@gmail.com","transactionid":"34444622CG671084E","shiptoname":"Laurence J Lafleur","addr":"8 East Street ","city":"NATICK","state":"MA","postal":"01760","country":"US"}'

    var myvar = JSON.parse(data);
    var myret = myvar.product[0];
    return myret;
}
console.log(test());
...