Не получается распарсить json содержащий словарь

202 просмотра
0
0 Комментариев

Есть задача распарсить json’ы вот этот:

({"d":"{\"events\":{\"keys\":[\"time\",\"room\",\"groups\",\"teacher\",\"name\",\"comment\",\"class\"],\"values\":[[1513593000,[71],[1308],9713,\"Архитектура вычислительных систем\",\"\",\"normal\"],[1513599300,[71],[1308],15653,\"Высшая математика\",\"\",\"normal\"],[1513673100,[71],[1308],15728,\"Охрана труда, гражданская оборона и охрана окружающей среды\",\"\",\"normal\"],[1513679400,[74],[1308],15651,\"Иностранный язык\",\"\",\"normal\"]]}}"})

или вот такой:

({"d":"{\"events\":{\"keys\":[\"time\",\"room\",\"groups\",\"teacher\",\"name\",\"comment\",\"class\"],\"values\":[[1513593000,[71],[1308],9713,\"Архитектура вычислительных систем\",\"\",\"normal\"],[1513599300,[71],[1308],15653,\"Высшая математика\",\"\",\"normal\"]]}}"})

В итоге нужно получить в отдельных переменных названия пар(name), время (time), аудиторию (room), и имя преподавателя (teacher). В том виде как они записаны в json. Количество пар может быть разное.


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

1 Ответы

Python Опубликовано 12.12.2018
0

Перешел по ссылке и посмотрел на данные. Ошибка парсинга json была из-за круглых скобок, поэтому нужно от них избавиться (text[1:-1]), чтобы парсинг прошел успешно:

text = r'({"d":"{\"events\":{\"keys\":[\"time\",\"room\",\"groups\",\"teacher\",\"name\",\"comment\",\"class\"],\"values\":[[1513593000,[71],[1308],9713,\"Архитектура вычислительных систем\",\"\",\"normal\"],[1513599300,[71],[1308],15653,\"Высшая математика\",\"\",\"normal\"],[1513673100,[71],[1308],15728,\"Охрана труда, гражданская оборона и охрана окружающей среды\",\"\",\"normal\"],[1513679400,[74],[1308],15651,\"Иностранный язык\",\"\",\"normal\"]]}}"})'
 
import json
data = json.loads(text[1:-1])
print(data)


Теперь нужно протестировать с сетью:

url = 'http://services.tsi.lv/schedule/api/service.asmx/GetLocalizedEvents?from=1513548000&to=1513734400&teachers=&rooms=&groups=1308&lang=%27ru%27'
 
import requests
rs = requests.get(url)
text = rs.text
 
import json
data = json.loads(text[1:-1])
print(data)


Заметил, что те данные соответствуют синтаксису контейнеров в питоне, а значит можно сделать хитрый парсинг используя модуль ast:

text = r'({"d":"{\"events\":{\"keys\":[\"time\",\"room\",\"groups\",\"teacher\",\"name\",\"comment\",\"class\"],\"values\":[[1513593000,[71],[1308],9713,\"Архитектура вычислительных систем\",\"\",\"normal\"],[1513599300,[71],[1308],15653,\"Высшая математика\",\"\",\"normal\"],[1513673100,[71],[1308],15728,\"Охрана труда, гражданская оборона и охрана окружающей среды\",\"\",\"normal\"],[1513679400,[74],[1308],15651,\"Иностранный язык\",\"\",\"normal\"]]}}"})'
 
import ast
data = ast.literal_eval(text)
print(data)

Добавить комментарий
Напишите свой ответ на данный вопрос.
Scroll Up