通过 httr 提交一个明确的 NULL 参数
Submitting an explicitly NULL parameter via httr
有没有办法通过 httr
将 NULL
作为 JSON 参数提交?
当我执行 httr::POST("https://httpbin.org/post", body = list(a = 1, b = NULL), httr::verbose(), encode = "json”)
时,我在输出中看到 b = NULL
从某处的有效负载中删除,即使 list(a = 1, b = NULL)
是一个有效的 R 列表,其中存在一个 b
值设置为 NULL
.
在 Python 的 requests
库中,允许提交 None
参数,我使用的 API 取决于该行为(可能不是最明智的设计选择,但这是我必须忍受的)。 httr
或 RCurl
有什么方法可以与之交互吗?
看来这是httr:::body_config
中的body <- compact(body)
造成的。您可以通过不将正文作为 list
提供而作为 character
直接提供 json 来解决。
不确定下面的 returns 是否正是您所期望的,但是您可以将正文作为包含 json
的字符向量直接发送:
httr::POST(
"https://httpbin.org/post",
body = '{"a":1,"b":"None"}',
httr::verbose(),
encode = "json"
)
或者,"programatically":
httr::POST(
"https://httpbin.org/post",
body = jsonlite::toJSON(list(a = 1, b = "None"), auto_unbox = TRUE),
httr::verbose(),
encode = "json"
)
来自httr:POST
对正文参数的帮助:https://www.rdocumentation.org/packages/httr/versions/1.4.0/topics/POST
请注意 jsonlite::toJSON
有几个选项可供选择,具体取决于您实际想要 POST
作为正文的内容:
jsonlite::toJSON(list(a = 1, b = NA), auto_unbox = TRUE)
# {"a":1,"b":null}
jsonlite::toJSON(list(a = 1, b = NULL), auto_unbox = TRUE)
# {"a":1,"b":{}}
jsonlite::toJSON(list(a = 1, b = NA_integer_), auto_unbox = TRUE)
# {"a":1,"b":"NA"}
jsonlite::toJSON(list(a = 1, b = list()), auto_unbox = TRUE)
# {"a":1,"b":[]}
有没有办法通过 httr
将 NULL
作为 JSON 参数提交?
当我执行 httr::POST("https://httpbin.org/post", body = list(a = 1, b = NULL), httr::verbose(), encode = "json”)
时,我在输出中看到 b = NULL
从某处的有效负载中删除,即使 list(a = 1, b = NULL)
是一个有效的 R 列表,其中存在一个 b
值设置为 NULL
.
在 Python 的 requests
库中,允许提交 None
参数,我使用的 API 取决于该行为(可能不是最明智的设计选择,但这是我必须忍受的)。 httr
或 RCurl
有什么方法可以与之交互吗?
看来这是httr:::body_config
中的body <- compact(body)
造成的。您可以通过不将正文作为 list
提供而作为 character
直接提供 json 来解决。
不确定下面的 returns 是否正是您所期望的,但是您可以将正文作为包含 json
的字符向量直接发送:
httr::POST(
"https://httpbin.org/post",
body = '{"a":1,"b":"None"}',
httr::verbose(),
encode = "json"
)
或者,"programatically":
httr::POST(
"https://httpbin.org/post",
body = jsonlite::toJSON(list(a = 1, b = "None"), auto_unbox = TRUE),
httr::verbose(),
encode = "json"
)
来自httr:POST
对正文参数的帮助:https://www.rdocumentation.org/packages/httr/versions/1.4.0/topics/POST
请注意 jsonlite::toJSON
有几个选项可供选择,具体取决于您实际想要 POST
作为正文的内容:
jsonlite::toJSON(list(a = 1, b = NA), auto_unbox = TRUE)
# {"a":1,"b":null}
jsonlite::toJSON(list(a = 1, b = NULL), auto_unbox = TRUE)
# {"a":1,"b":{}}
jsonlite::toJSON(list(a = 1, b = NA_integer_), auto_unbox = TRUE)
# {"a":1,"b":"NA"}
jsonlite::toJSON(list(a = 1, b = list()), auto_unbox = TRUE)
# {"a":1,"b":[]}