Я не уверен, возможно ли это.Конечная точка пакета специально ищет словарь для передачи (исключая строковые представления).httr
состояния:
тело: должно быть NULL, FALSE, символ, сырье или список
Я пытался использовать библиотеку collections
для генерации dict
data <- Dict$new(list(format = 'json', data = "4JGCB5HE1CA138466;4JGCB5HE1CA138466;4JGCB5HE1CA138466"))
httr
неудивительно, что отклонил его как неправильный тип тела.
Я пытался использовать jsonlite для преобразования с:
data <- jsonlite::toJSON(data)
Выход:
Error: No method asJSON S3 class: R6
Я думаю, из-за того, что данные являются environment
.
Попытка чтения в строковом словаре в json возвращает no data
:
library(httr)
library(jsonlite)
headers = c(
'Accept' = '*/*',
'Accept-Encoding' = 'gzip, deflate',
'Content-Type' = 'application/x-www-form-urlencoded',
'User-Agent' = 'Mozilla/5.0'
)
data = jsonlite::toJSON('{"format":"json","data":"4JGCB5HE1CA138466;4JGCB5HE1CA138466;4JGCB5HE1CA138466"}')
r<- httr::POST(url = 'https://vpic.nhtsa.dot.gov/api/vehicles/DecodeVINValuesBatch/', httr::add_headers(.headers=headers), body = data. encode='json'
print(content(r))
Если мы исследуем преобразованные данные
> data
["{\"format\":\"json\",\"data\":\"4JGCB5HE1CA138466;4JGCB5HE1CA138466;4JGCB5HE1CA138466\"}"]
Это больше не структура словаря, которую ожидает сервер.
Итак, я новичок в R, но кажется, что может быть проще просто перейти на Python, который имеет объект словаря, а также библиотеку json, котораяудобно обрабатывает преобразование
строки в json:
import requests,json
url = 'https://vpic.nhtsa.dot.gov/api/vehicles/DecodeVINValuesBatch/'
data = json.loads('{"format": "json", "data":"4JGCB5HE1CA138466;4JGCB5HE1CA138466;4JGCB5HE1CA138466"}')
r = requests.post(url, data=data)
print(r.json())
dict
import requests
url = 'https://vpic.nhtsa.dot.gov/api/vehicles/DecodeVINValuesBatch/'
data = {'format': 'json', 'data':'4JGCB5HE1CA138466;4JGCB5HE1CA138466;4JGCB5HE1CA138466'}
r = requests.post(url, data=data).json()
print(r)