JSON-массив в параметре "body" в httr :: POST () - PullRequest
0 голосов
/ 05 марта 2019

Я хочу отправить запрос на публикацию с несколькими переменными в теле, используя пакет httr.

Как будет выглядеть тело, если оно будет в формате JSON:

{a:"1", b:"2", c:[{d:"3", e:"4"}]}

То, что я пробовал с httr :: POST ()

r <- POST("http://httpbin.org/post", body = list(a = 1, b = 2, c = list(d=3, e=4)))

Ошибка, которую я получил:

Error in curl::handle_setform(handle, .list = req$fields) : 

Unsupported value type for form field 'c'.

Как мне нужно структурировать мой оператор POST (), чтобы отправить его вформат, о котором я хочу упомянуть выше?

РЕДАКТИРОВАТЬ: при попытке решения @ renny (я добавил verbose () для удобства просмотра), т.е. следующую строку

r <- POST("http://httpbin.org/post", body = json_array, encode="json", verbose())

Я могу заметить, что JSONсгенерированный в выходных данных имеет следующий формат:

{"post":{"a":1,"b":2,"c":{"d":3,"e":4}}}

Как видите, переменная "c" не имеет [] вокруг нее, и есть переменная "post".Вот что я хочу.

{"a":1,"b":2,"c":[{"d":3,"e":4}]}

Ответы [ 2 ]

1 голос
/ 05 марта 2019
library(httr)

 json_array <- list(
      post =  list(a = 1, b = 2, c = list(d=3, e=4))
    )

 r <- POST("http://httpbin.org/post", body = json_array, encode="json")

app_data <- content(r)

Попробуйте это.Это может сработать!

0 голосов
/ 05 марта 2019

Таким образом, решение этой проблемы, которое мне пришлось использовать, было строкой JSON в параметре body. Если, например, ниже рассматривается строка JSON:

json <- {"a":1,"b":2,"c":[{"d":3,"e":4}]}

Мне пришлось передать эту строку JSON в качестве значения параметра "body" для httr :: POST () Таким образом, вызов функции будет выглядеть так:

r <- POST(url=url, body=json, encode="json", verbose())
...