Непредвиденная ошибка токена, выданная анализом JSON - PullRequest
1 голос
/ 30 июня 2019

Нужна помощь в выяснении этой ошибки JSON.parse, которая возникает при загрузке страницы.

Uncaught SyntaxError: Неожиданный токен m в JSON в позиции 0 в JSON.parse ()

Это просто пример кода, предоставленного в платежном шлюзе Mastercard Документация .Я пытаюсь проверить это с помощью тестовых данных, предоставленных продавцом.Я проверил код через валидатор, и он не возвращает никаких ошибок.

Вот код, который я пытаюсь выполнить.

<!DOCTYPE html>
<html>
    <head>
        <script src="https://test-gateway.mastercard.com/checkout/version/52/checkout.js"
                data-error="errorCallback"
                data-cancel="cancelCallback">
        </script>

        <script type="text/javascript">
            function errorCallback(error) {
                  console.log(JSON.stringify(error));
            }
            function cancelCallback() {
                  console.log('Payment cancelled');
            }

            Checkout.configure({
                "merchant" : "TEST",
                "order" : {
                    "amount" : 1000,
                    "currency" : "USD",
                    "description" : "Ordered goods" ,
                    "id" : 123 
                },
                "interaction" : {
                    "operation" : "AUTHORIZE", 
                    "merchant" : {
                        "name" : "ABC Hotel" ,
                        "address" : {
                            "line1" : "some road" ,
                            "line2" : "some city"          
                        }    
                    }
                }
            });

        </script>
    </head>
    <body>
        ...
        <input type="button" value="Pay with Lightbox" onclick="Checkout.showLightbox();" />
        <input type="button" value="Pay with Payment Page" onclick="Checkout.showPaymentPage();" />
        ...
    </body>
</html>

enter image description here

1 Ответ

2 голосов
/ 30 июня 2019

Большую часть времени, когда JSON.parse выдает ошибку с недопустимым JSON в позиции 0, проблема заключается в Byte Order Mark (BOM) ( Wikipedia ).

Чтобы избежать анализа спецификации, вам следует проверить, начинается ли строка JSON с 0xFEFF, которая является представлением Unicode для BOM, а затем отключить ее вручную.

Пример:

let json = `{"hello":"world"}`;

// make sure you trim the JSON string before, otherwise the first character may be a whitespace
if (json.trim().charCodeAt(0) === 0xFEFF) {
    json = json.slice(1); // cut the BOM character
}

const result = JSON.parse(json);
...