Я пытаюсь получить данные из API для нашей системы управления персоналом.Но когда извлекается отдельная фотография, у файла JSON больше нет имени контейнера, что нарушает мой текущий скрипт.
Для доступных API, когда вы запрашиваете все фотографии сотрудников в 1 запросе, он возвращает только миниатюру фото. Чтобы получитьНа большом фото вы должны сделать это по 1 сотруднику за раз и включить идентификатор работника в URL.Однако проблема заключается в том, что при выполнении последнего не отображается имя объекта только элементы в документе.
import json
import pyodbc
import requests
url = "https://someurl.com/api/PersonPhoto"
headers = {
'Accept': "application/json",
'Authorization': "apikey xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
'Content-Type': "application/json",
'cache-control': "no-cache"
}
response = requests.request("GET", url, headers=headers)
data = json.loads(response.text)
ID,Photo,PhotoDate,PhotoType = [],[],[],[]
for device in data['PersonPhoto']:
ID.append(device[u'ID'])
Photo.append(device[u'Photo'])
PhotoDate.append(device[u'PhotoDate'])
PhotoType.append(device[u'PhotoType'])
connStr = pyodbc.connect(
"DRIVER={SQL Server};"
"SERVER=TestSrver;"
"Database=MyDB;"
"Trusted_Connection=yes;"}"
)
cursor = connStr.cursor()
sql = "INSERT INTO dbo.Employee_Photo2 ([EmployeeID],[PhotoBinary],[PhotoDate],[FileType]) VALUES (?,?,?,?)"
vals = [(int(device[u'ID']), device[u'Photo'], device[u'PhotoDate'], device[u'PhotoType']) \
for device in data['PersonPhoto']]
cursor.executemany(sql, vals)
connStr.commit()
cursor.close()
connStr.close()
Приведенный выше код работает, когда я вытаскиваю всех сотрудников.Вытащить 1 сотрудника для получения большой фотографии - это тот же вызов API, за исключением того, что вы должны указать идентификатор сотрудника в конце URL-адреса.
Проблема, с которой я сталкиваюсь, заключается в том, что когда вы делаете этот вызов API, он больше не включает имя объекта PersonPhoto в результирующий JSON, он просто возвращает 4 атрибута в фигурных скобках.Поэтому я не уверен, как изменить приведенный выше код для обработки отсутствия имени объекта.
JSON, который работает с вышеуказанным сценарием:
{
"PersonPhoto": [
{
"ID": 123,
"Name": "Test User",
"Photo": "/9j/4AAQSkZJRgABAQEAYABgAAD",
"PhotoDate": "2019-05-02T00:00:00",
"PhotoType": ".jpg"
}
]
}
JSON, который возвращается при передачеemployeeid в конце URL:
{
"ID": 123,
"Name": "Test User",
"Photo": "/9j/4AAQSkZJRgABAQEAYABgAAD/2wBDAAgGBgcGBQgHBwcJCQgKD",
"PhotoDate": "2019-05-02T00:00:00",
"PhotoType": ".jpg"
}