(Ускоренный курс Python 16.8): ошибка json.decoder.JSONDecodeError: Ожидаемое значение: строка 1 столбец 1 (символ 0)

#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,",
...
...