Попытка проанализировать файл JSON с помощью Python

#json #python-3.x #parsing

Вопрос:

Поэтому я уже несколько дней бьюсь головой о стену и ныряю в кроличью нору google/SO в поисках ответов. Я обсуждал, как сформулировать этот вопрос, поскольку API, из которого я извлекаю, может содержать или не содержать некоторую конфиденциальную информацию, которая, на мой взгляд, неудобно близка к законам HIPPA. По этой причине я не буду предоставлять прямую ссылку/аутентификацию для моего кода. Тем не менее, я предоставлю составленный сценарий JSON, чтобы помочь с объяснением.

 import requests
import json
import urllib3

r = requests.get('https://madeup.url.com/api/vi/information here', auth=('123456789', '1111111111222222222223333333333444444455555555'))

payload = {'query': 'firstName'}

response = requests.get(r, params=payload)

json_response = response.json()

print(json.dumps(json_response))
 

Файл JSON, который я пытаюсь проанализировать, отчасти выглядит так:

 "{"id": 123456789, "firstName": "NAME", "lastName": "NAME", "phone": "NUMBER", "email": "EMAIL@gmail.com", "date": "December 16, 2021", "time": "9:50am", "endTime": "10:00am",.....
 

Когда я запускаю код, я получаю «urllib3.исключения.Ошибка определения местоположения: Не удалось проанализировать: <Ответ [200]>» Обратная связь, и я ни за что на свете не могу понять, что происходит. urllib3 устанавливается и обновляется в соответствии с консолью.

Любая помощь была бы очень признательна. ТИА

Ответ №1:

Это не файл JSON. Это строка, содержащая экранированные символы. Его необходимо удалить, прежде чем синтаксический анализ сможет работать.

Комментарии:

1. Так вот что делает строка «json.dumps»? превращение файла в строку?

2. Это помогло бы объяснить, почему, когда я печатаю весь API в файл Data.json и смотрю на него, он выводится в одной строке, а при использовании команды «отступ=x» он не очень хорошо очищается…

Ответ №2:

вы передаете r в запросы.get() (строка 9) , но r является ответом на другие запросы.get() (строка 5)… разве вы не должны передавать параметры=полезная нагрузка в строке 5? затем получать ответ de оттуда в одном запросе

 import requests
import json
import urllib3

payload = {'query': 'firstName'}
response = requests.get('{YOUR_URL}', auth=('{USER}', '{PASS}'), params=payload)
json_response = response.json()

print(json.dumps(json_response))
 

Комментарии:

1. Ну, это здесь напечатало весь API для терминала в виде списка, который выглядит как список, но он не проанализировал «Имя».

Ответ №3:

Это не файл JSON. Это строка, содержащая экранированные символы. Его необходимо удалить, прежде чем синтаксический анализ сможет работать.

Ну а теперь я еще больше запутался. Я пытаюсь самостоятельно обучиться питону и явно борюсь. Чтобы получить «JSON», который я опубликовал, я использовал следующий код:

 r = requests.get('URL', 'auth = ('user', 'pass'))

Data = r.json()

packages_str = json.dumps(Data[0])

with open('Data.json', 'w') as f:
   json.dump(packages_str, f)
 

Так что, по сути, сейчас я еще больше потерян…

Ответ №4:

Итак, обновление: Хорошие новости! вроде… так что мой код теперь выглядит следующим образом;

 import requests
import json
import urllib3

payload = {
    'query1'= 'firstName',
    'query2'= 'lastName'
}

response = requests.get("url", auth= ("user","pass"), params=payload)

Data = response.json()

packages_str = json.dumps(Data, ensure_ascii=False, indent=2)

with open('Data.json), 'w') as f:
   json.dump(packages_str,f)
   f.write(packages_str)
 

И когда я затем открываю файл JOSN, первая строка-это весь API в строке, но ниже-правильно отформатированный файл JSON. К сожалению, это весь API, а не проанализированный файл JSON, который ищет нужную мне информацию…

Продолжаю спускаться в кроличью нору google/youtube/SO и обновлю позже, если найду обходной путь.