#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 и обновлю позже, если найду обходной путь.