Как сообщить JavaScript, что моя переменная является массивом, а не строкой?

Я использую flask, и мой бэкэнд возвращает AJAX ответ в виде списка python, а затем JavaScript понимает его как строку, но это проблема, потому что мне нужно перебирать этот список.

Все, что я мог найти в Интернете, это как проверить тип переменной, но не смог найти никакого метода (который в python довольно прост), чтобы изменить его.

Попробуйте JSON.parse.   —  person David Spira    schedule 29.08.2019

Array.isArray() для проверки ключевого слова array..typeof, чтобы узнать тип переменной   —  person David Spira    schedule 29.08.2019

Но переменная представляет собой строку @ShivendraGupta, поэтому Array.isArray и typeof возвращают false и "string" соответственно.   —  person David Spira    schedule 29.08.2019

В большинстве случаев HTTP-ответ приходит в виде строки. Таким образом, вы можете сделать две вещи. Во-первых, вы должны проверить, являются ли данные строковым типом? если это так, преобразуйте их в объект. typeof response === 'string' затем JSON.parse( response )   —  person David Spira    schedule 29.08.2019

Возможный дубликат разобрать строку JSON в массив   —  person David Spira    schedule 29.08.2019

@JackBashford, я не понимаю. должен ли маршрут фляги иметь строку: return JSON.parse(name_of_the_list)? в настоящее время он возвращает name_of_the_list   —  person David Spira    schedule 29.08.2019

Эта ссылка поможет вам. Array.isArray() w3schools.com/jsref/tryit.asp?filename=tryjsref_isarray   —  person David Spira    schedule 29.08.2019

Возможный дубликат передачи списка python в javascript   —  person David Spira    schedule 29.08.2019

Можете ли вы опубликовать образец строки, которую вы получаете?   —  person David Spira    schedule 30.08.2019

См. также:  Настройка заголовка авторизации - приложение Flask с использованием запросов Python и JWT
Понравилась статья? Поделиться с друзьями:
IT Шеф
Комментарии: 2
  1. David Spira

    Метод Array.isArray() определяет, является ли переданное значение массивом или нет.

    var someNumbers = [1,2,3];
    console.log( Array.isArray( someNumbers ) );
    

    и если это массив, он вернет

    true
    

    Перейдите по этой ссылке, чтобы узнать больше о Array.isArray

    Это не тот вопрос, который задают; OP знает, что JavaScript работает со строкой, но он/она хочет заставить свой JavaScript понять, что это действительно массив. person David Spira; 30.08.2019

  2. David Spira

    Если ваш ответ представляет собой строку, вы можете использовать JSON.parse, чтобы превратить ее в объект/массив JS.

    var response = someAjaxStuff(...);
    // response is a string
    response = JSON.parse(response);
    // now reponse is an Object/Array
    

    Если вы используете AJAX с jQuery, вы также можете использовать dataType:

    $.ajax({
        url: 'https://example.com/api/somejson',
        dataType: 'json',
        method: 'get',
        success: function(res) {
            // console.log res will be an object/array here.
        }
    
    });
    

    Но если вы пишете свой собственный API, я предлагаю вам добавить правильный заголовок, чтобы сообщить браузеру, что это формат JSON, а не строка.

    Для фляги вы можете использовать jsonify (ссылка):

    return jsonify(somedict)
    

    я пробую первый вариант, который вы представили, и я получаю сообщение об ошибке консоли: Uncaught SyntaxError: неожиданный токен u в JSON в позиции 2 person David Spira; 29.08.2019

    Возможно, ваша строка не является допустимым JSON. Вы можете проверить свою строку здесь. person David Spira; 29.08.2019

    моя строка на самом деле является списком Python [[a,b,c],[d,e,f],…] person David Spira; 29.08.2019

    Если это не JSON, JS не сможет прочитать эту строку (если вы не напишете для этого синтаксический анализатор). Убедитесь, что ваш API может отвечать на действительный JSON. person David Spira; 29.08.2019

Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: