Ошибка при попытке извлечь данные из JSON

Я использую этот 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":"[email protected]","fullname":"Laurence J Lafleur","email":"[email protected]","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)

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

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

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

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

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

Жюльен


person Julien Lafleur    schedule 22.01.2020    source источник
comment
похоже, что это уже объект. вы пробовали только var myret = input_data.product; return myret?   -  person Andrew Lohr    schedule 22.01.2020
comment
Я не думаю, что вам нужно вызывать JSON.parse(), поскольку данные уже являются объектом.   -  person DanielSchroederDev    schedule 22.01.2020


Ответы (1)


Что ж, тут две ошибки.

  • Начиная с 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 это 'o', а не строка, логическое значение, объект, массив или число)

  • Вторая проблема заключается в том, что 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":"[email protected]","fullname":"Laurence J Lafleur","email":"[email protected]","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());

person gabriel.hayes    schedule 22.01.2020