【问题标题】:Submitting an explicitly NULL parameter via httr通过 httr 提交显式 NULL 参数
【发布时间】:2019-01-03 13:52:24
【问题描述】:

有没有办法通过httrNULL作为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 取决于该行为(可能不是最明智的设计选择,但这是我必须接受的)。 httrRCurl 有什么方法可以与之交互吗?

【问题讨论】:

    标签: r curl rcurl httr


    【解决方案1】:

    这似乎是由httr:::body_config 中的body <- compact(body) 引起的。您可以通过不将主体提供为list,而是直接提供带有json 的character 来解决此问题。

    不确定以下内容是否完全符合您的预期,但您可以将正文作为包含json 的字符向量直接发送:

    httr::POST(
      "https://httpbin.org/post",
      body = '{"a":1,"b":"None"}',
      httr::verbose(),
      encode = "json"
    )
    

    或者,“以编程方式”:

    httr::POST(
      "https://httpbin.org/post",
      body = jsonlite::toJSON(list(a = 1, b = "None"), auto_unbox = TRUE),
      httr::verbose(),
      encode = "json"
    )
    

    来自httr:POST对body参数的帮助: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":[]} 
    

    【讨论】:

    猜你喜欢
    • 2022-09-25
    • 1970-01-01
    • 2020-09-07
    • 1970-01-01
    • 2018-05-19
    • 2021-01-27
    • 1970-01-01
    • 2023-04-05
    • 1970-01-01
    相关资源
    最近更新 更多