#python #python-3.x
Вопрос:
Я пытаюсь преобразовать этот файл json в более удобочитаемый. Однако я получаю сообщение об ошибке:
raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
Мой код таков:
import json
file = 'data/1_month.geojson'
with open(file) as f:
all_eq_data = json.load(f)
readable_file = 'data/readable_eq_data.json'
with open(readable_file, 'w') as f:
json.dump(all_eq_data, f, indent=4)
Какое решение может быть для этого?
Ответ №1:
В файле что-то 1_month.geojson
не так, возможно, неверный символ в начале файла. Вместо того, чтобы сохранять данные локально, я предлагаю вам загрузить их непосредственно с веб-сайта, используя requests
all_eq_data = requests.get('https://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/1.0_month.geojson').json()
with open('readable_file.json', 'w') as f:
json.dump(all_eq_data, f, indent=4)
Комментарии:
1. Вау, не знал, что ты можешь это сделать. Это сработало, спасибо!
Ответ №2:
Ваш код работает для меня иначе, чем кодирование. Пожалуйста, повторно проверьте свой файл json (например, при повторной загрузке).
path = r'yourpathDownloads1.0_month.geojson'
import json
with open(path, encoding='utf-8') as f:
all_eq_data = json.load(f)
readable_file = path '.readable.json'
with open(readable_file, 'w') as f:
json.dump(all_eq_data, f, indent=4)
Комментарии:
1. Обратные косые черты окон, похоже, требуют разъяснений. Не должно быть причин не использовать косые черты, которые также работают в Windows. Если вы предполагаете, что файл был загружен в неясный вложенный подкаталог, возможно, также объясните это предположение.
2. @tripleee Я скачал этот файл из браузера, поэтому я просто скопировал этот путь.
3. Этот путь будет зависеть от вашей операционной системы, вашего браузера и вашей конфигурации.
4. @tripleee Да, поэтому я добавляю «вашпуть», чтобы подразумевать это.
5. Определенно, некоторые символы требуют кодировки.
Ответ №3:
В то время как OP запрашивает решение на python, я также хотел поделиться однострочным, которое легко это делает. В зависимости от вашей операционной системы у вас может быть или может быть установлена команда UNIX под названием json_pp
. Он обеспечивает красивый вывод JSON в stdout, который вы можете легко записать в файл. Все, что вам нужно, это curl
и эта команда UNIX:
curl https://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/1.0_month.geojson |
json_pp > readable_file.json
Вы получите что-то вроде:
{
"metadata" : {
"status" : 200,
"api" : "1.10.3",
"title" : "USGS Magnitude 1.0 Earthquakes, Past Month",
"url" : "https://earthquake.usgs.gov/earthquakes/feed/v1.0/summary/1.0_month.geojson",
"generated" : 1626877469000,
"count" : 8488
},
"type" : "FeatureCollection",
"features" : [
{
"type" : "Feature",
"geometry" : {
"type" : "Point",
"coordinates" : [
-150.9063,
61.6748,
45.8
]
},
"properties" : {
"url" : "https://earthquake.usgs.gov/earthquakes/eventpage/ak0219aazwl5",
"code" : "0219aazwl5",
"net" : "ak",
"nst" : null,
"types" : ",origin,",
...
...