Ошибка JSON.parse (Uncaught SyntaxError: неожиданный токен o в JSON в позиции 1)

    $.getJSON(staticMS, function(data) {
        stockData = data.products_and_categories;
        console.log(stockData);
        var typeData = JSON.parse(stockData)
        console.log(typeData.itemType);
    });

Не уверен, что с этим не так, я продолжаю получать ошибку «Uncaught SyntaxError: Unexpected token o in JSON at position 1». Попытка доступа к части (itemType указывается ранее в сценарии) в части products_and_categories файла JSON.

Таблицы по продуктам и категориям (после того, как я нажму «объект» в консоли):

Аксессуары: (8) [{…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}]

Шляпы: (6) [{…}, {…}, {…}, {…}, {…}, {…}]

Рубашки: (7) [{…}, {…}, {…}, {…}, {…}, {…}, {…}]

Брюки: (5) [{…}, {…}, {…}, {…}, {…}]


person Oliver    schedule 10.04.2020    source источник
comment
stockData не является допустимой строкой JSON.   -  person Sajeeb Ahamed    schedule 10.04.2020
comment
Пожалуйста, поделитесь, что console.log(stockData); показывает эта строка в консоли.   -  person Sajeeb Ahamed    schedule 10.04.2020
comment
Как мне тогда это исправить? Или как я могу получить доступ к другой таблице в stockData.   -  person Oliver    schedule 10.04.2020
comment
добавлено то, что отображается в консоли (мне пришлось нажать «объект», чтобы получить это)   -  person Oliver    schedule 10.04.2020
comment
Я не вижу ничего похожего на products_and_categories внутри объекта data. Я вижу, что есть что-то действительное, например data.Accessories   -  person Sajeeb Ahamed    schedule 10.04.2020
comment
Я думаю, вы можете получить itemType, используя что-то вроде этого- data.Accessories[0]. itemType   -  person Sajeeb Ahamed    schedule 10.04.2020
comment
Исходные данные JSON были больше, чем это, но я сделал data.products_and_categories, чтобы получить эту конкретную таблицу (та, которую я опубликовал, — это таблица products_and_categories), теперь я пытаюсь использовать то, что ввел пользователь, чтобы получить другой массив (шляпы, аксессуары, и т. д.) в таблице accessories_and_categories, для которой я установил значение stockData. Если я делаю stockData.Hats, это работает, но если пользователь вводит (который сохраняется в localStorage как itemType) шляпы, это не сработает.   -  person Oliver    schedule 10.04.2020


Ответы (1)


Как прокомментировал Саджиб, «stockData не является допустимой строкой JSON». На самом деле stockData скорее всего объект JS, потому что

1) это поле в проанализированном JSON, а JSON обычно не содержит вложенных JSON

2) JSON.parse переводит свой параметр в строку. Строковый объект JS — это '[object Object]'. Разбор этого приведет к ошибке, которую вы видели: «Неожиданный токен o в JSON в позиции 1».

Если мое предположение верно, то все, что вам нужно сделать, это удалить вложенный JSON.parse:

  $.getJSON(staticMS, function(data) {
        stockData = data.products_and_categories;
        console.log(stockData);
        var typeData = stockData;
        console.log(typeData.itemType);
    });
person junvar    schedule 10.04.2020
comment
Когда я это делаю, я получаю undefined в консоли. - person Oliver; 10.04.2020
comment
Возможно, в typeData нет свойства itemType. Глядя на ваш вопрос, похоже, что ключами в вашем объекте являются «шляпы», «аксессуары» и т. д. Если вы вошли в систему stockData.hats или typeData.hats, вы получите массив - person royranger; 10.04.2020
comment
когда я делаю .Hats, это работает, но когда я использую .getItemType или .itemType (не уверен, что использовать), я получаю неопределенность, поэтому в верхней части моего файла у меня есть var itemType = "itemType";, а затем в другой функции onclick у меня есть var item_type = document.getElementById('item_type').value; и getItemType = localStorage.getItem(itemType); (после Я установил item_type в itemType), не уверен, что я делаю неправильно. (Другая функция onclick работает, и когда я делаю console.log(getItemType) в этой функции, она тоже работает) - person Oliver; 10.04.2020