Использование массива JSON в запросе POST

Я пишу API оболочку для запроса почтовых индексов Великобритании с использованием пакета httr, и все работает нормально, когда я использую запросы GET . Я немного теряюсь, когда дело доходит до использования запроса POST.

Вот что говорится в документации API:

Принимает объект JSON, содержащий массив почтовых индексов. Возвращает список совпадающих почтовых индексов и соответствующих доступных данных.

Принимает до 100 почтовых индексов.

POST https://api.postcodes.io/postcodes?q=[postcode]

Опубликовать данные

Этот метод требует публикации объекта JSON, содержащего массив почтовых индексов. Например.

{ "почтовые индексы": ["PR3 0SG", "M45 6GN", "EX165BL"] }

Я пробовал следующее:

library(httr)

pc_json <- '{
  "postcodes" : ["PR3 0SG", "M45 6GN", "EX165BL"]
}'

r <- POST(paste0("https://api.postcodes.io/postcodes?q=", pc_json, encode = "json"))

Но он возвращает это:

$status 1 400

$error 1 "Отправлен неверный JSON. Вам необходимо отправить объект JSON с массивом почтовых индексов или объектов геолокации "

То же самое происходит, когда я обрезаю массив и использую это:

r <- POST("https://api.postcodes.io/postcodes?q=EX165BL")
content(r)

Я читал похожие темы здесь и здесь, но они не облегчили решение моей проблемы.

Есть идеи, как это исправить?


person epo3    schedule 08.08.2016    source источник
comment
Возможно, вы и @marty_c захотите сотрудничать в pkg. Но почему бы не написать пакет, который синхронизирует данные, а затем вся обработка происходит локально, а не на сервере API? это будет намного быстрее и эффективнее в долгосрочной перспективе.   -  person hrbrmstr    schedule 08.08.2016
comment
спасибо за этот контакт. мой план в долгосрочной перспективе состоял в том, чтобы запрашивать данные локально. файл, содержащий все данные, кажется довольно большим, поэтому о его включении в пакет не может быть и речи. но его можно было скачать отдельно.   -  person epo3    schedule 08.08.2016
comment
Вы также можете поместить любой массив JSON во что-то, что будет проходить через r с помощью функции fromJSON() из пакета httr.   -  person Luke Holcomb    schedule 24.07.2019


Ответы (1)


Вам почти нужно просто отформатировать почтовые индексы в виде списка и использовать аргумент тела POST, а затем закодировать как json:

library(httr)

pc_json <- list(
  postcodes = c("PR3 0SG", "M45 6GN", "EX165BL")
)
res <- POST("https://api.postcodes.io/postcodes"
            , body = pc_json
            , encode = "json")
appData <- content(res)
person jdharrison    schedule 08.08.2016