Парсинг JSON в Javascript из Python

307
08 марта 2017, 20:02

Передаю данные с сервера. Получаю дату на клиенте.

Паршу:

var msg = JSON.parse(data);
console.log(msg);

Получаю:

{'id': 17, 'created_at': None, 'modified_at': None, 'first_name': 'ccc', 'last_name': 'zzzzzzzzzxxxxxxxxx', 'full_name': 'xxxxxxxxxccc', 'email': None, 'password': None, 'active': True, 'confirmed_at': None, 'last_login_at': None, 'current_login_at': None, 'last_login_ip': None, 'current_login_ip': None, 'login_count': None, 'created_by': None}

Но при попытке получить значение по ключу, msg.id либо же msg["id"], в ответ получаю undefined

Предполагаю, что дело в "валидности", либо же в наличии None.

Подскажите, что делать? Желательно, чтобы данные не пришлось изменять на стороне сервера.

Заранее спасибо, и извиняюсь за банальный вопрос.

Answer 1
var newData = data.replace(/\'/g, "\""); //  Меняем кавычки
newData = newData.replace(/\None/g, "null");  // Меняем None на null
newData = newData.replace(/\True/g, "true"); // Меняем True на trur
newData = newData.substr(1, newData.length-2); // Обрезаем первые и последние кавычки
var msg = JSON.parse(newData);
console.log(msg);
Answer 2

Есть несколько основных правил для создания строки JSON:

  1. Строка JSON содержит либо массив значений, либо объект (ассоциативный массив пар имя/значение).
  2. Массив заключается в квадратные скобки ([ и ]) и содержит разделенный запятой список значений.
  3. Объект заключается в фигурные скобки ({ и }) и содержит разделенный запятой список пар имя/значение.
  4. Пара имя/значение состоит из имени поля, заключенного в двойные кавычки, за которым следует двоеточие (:) и значение поля.
  5. Значение в массиве или объекте может быть:
    • Числом (целым или с плавающей точкой)
    • Строкой (в двойных кавычках)
    • Логическим значением (true или false)
    • Другим массивом (заключенным в квадратные скобки)
    • Другой объект (заключенный в фигурные скобки)
    • Значение null

Чтобы включить двойные кавычки в строку, нужно использовать обратную косую черту: \". Так же, как и во многих языках программирования, можно помещать управляющие символы и шестнадцатеричные коды в строку, предваряя их обратной косой чертой.

Answer 3

Не уверен, что это сработает, и, вероятно, это не безопасно, но можно попробовать вот так:

var None = null; var True = true; eval("var msg = " + data);

READ ALSO
Форма добавления вкладок в HTML+js [требует правки]

Форма добавления вкладок в HTML+js [требует правки]

Подскажите, как сделать такое меню добавления вкладок из списка, пожалуйста

200
Array.prototype.forEach - полифил

Array.prototype.forEach - полифил

В одном из учебников была задача:

334
Зачем нужны библиотеки типа React.js [требует правки]

Зачем нужны библиотеки типа React.js [требует правки]

Я так понял, что они нужны для динамического обновления данных в доме, но для этого нужен массив с данными, а получать их с помощью Ajax довольно...

266