Недавно я начал работать с JSON (с Python 3.7 в Debian 9). Это первый (вероятно, из многих) набор данных в JSON, с которым я имел удовольствие работать.
Я использовал встроенный модуль Python 1034 * для интерпретации произвольных строк и файлы. Теперь у меня есть база данных с ~ 5570 строками, относящимися к заданному списку серверов. В конвейере есть много вещей, для которых я разработал план, но я застрял на этой конкретной системе санитарии.
Вот код, который я использую для анализа:
#!/usr/local/bin/python3.7
import json
def servers_from_json(file_name):
with open(file_name, 'r') as f:
data = json.loads(f.read())
servers = [{'asn': item['data']['resource'], 'resource': item['data']['allocations'][0]['asn_name']} for item in data]
return servers
servers = servers_from_json('working-things/working-format-for-parse')
print(servers)
Мой мотив
Я пытаюсь сопоставить каждый из этих серверов с их именем ASN_NAME (это поле извлечено прямо из API RIPE; таким образом, предоставляя мне информацию, относящуюся к физический d c, на котором расположен каждый сервер. Затем, как только это будет сделано, я запишу их в существующую таблицу SQL, рядом с логическим значением.
Итак, вот где он становится фанк. Я запускаю весь набор данных через это, я получаю это сообщение об ошибке :
Traceback (most recent call last):
File "./parse-test.py", line 12, in <module>
servers = servers_from_json('2servers.json')
File "./parse-test.py", line 7, in servers_from_json
data = json.loads(f.read())
File "/usr/local/lib/python3.7/json/__init__.py", line 348, in loads
return _default_decoder.decode(s)
File "/usr/local/lib/python3.7/json/decoder.py", line 340, in decode
raise JSONDecodeError("Extra data", s, end)
json.decoder.JSONDecodeError: Extra data: line 38 column 2 (char 1098)
Я заметил, что проблема с моим начальным набором данных заключалась в том, что каждый объект JSON не был ограничен , \ n. Произошла некоторая очистка, все еще не повезло.
Затем я добавил первые 3 (?) объекта в полностью чистый файл и ... успешно. Я могу заставить скрипт читать и интерпретировать их так, как это нужно. Я хочу.
Вот набор данных с разделитель запятой:
http://db.farnworth.site/servers.json
Вот рабочий набор данных:
http://db.farnworth.site/working-format.json
У кого-нибудь есть идеи?