【问题标题】:R Plumber, How to create nested JSONR Plumber,如何创建嵌套 JSON
【发布时间】:2021-11-11 08:19:57
【问题描述】:

需要帮助,我只是用 R Plumber 创建 API,我只是希望 Result Json 是这样的

不是这样的

以下是我的 R Plumber 脚本

library(plumber)
library(jsonlite)


#* @get /nested_json
#* @serializer unboxedJSON
function() {
    
  main_info <- data.frame(
    Name = "John",
    Address = "Stret No. 1",
    Point = "600"
  )
  
  reason_info <- data.frame(code = c('AAA', 'BBB', 'CCC', NA, 'EEE'),
                            descriptiom = c('low value of point A', 'low value of point B', 'low value of point C', NA, 'low value of point D')  )
  
  main_info[1, "reason"][[1]] <- list(reason_info)
  
  final_output <- as.list(main_info)
  final_output
  
}

非常感谢您的任何建议

更新

@deschen 的替代解决方案正好解决了这个问题,我创建 Web 应用程序的队友可以使用这个解决方案。

替代解决方案如下:

  {
  "Name": "John",
  "Address": "Stret No. 1",
  "Point": "600",
  "reason": [
    {
      "code": "AAA",
      "description": "low value of point A"
    },
    {
      "code": "BBB",
      "description": "low value of point B"
    },
    {
      "code": "CCC",
      "description": "low value of point C"
    },
    {
      "code": null,
      "description": null
    },
    {
      "code": "EEE",
      "description": "low value of point D"
    }
  ]
} 

【问题讨论】:

  • 我没有立竿见影的解决方案,但在过去的一段时间里,我已经尝试过使用此类 API 结构并出错。因此,就您而言,这完全是关于如何将您的主要信息和原因信息组合到列表列表中。我提供了一些代码作为答案,虽然它没有按你的意愿工作,但它可能会给你一些关于如何继续的提示和想法。
  • 非常感谢您的解决方案,我只需添加 drop_na() 即可删除具有 NA 的特定行
  • 很好奇,您是否有任何理由希望 JSON 代码看起来与此 API 文档中的不同?我的意思是如果它应该用于相同的目的,那么代码应该看起来像文档指定的那样,不是吗?
  • 所以我在 R 中创建了一些计算引擎...并将由我的朋友构建的 Web 应用程序(用户界面)中的 API 调用...我的朋友想要 Json 格式,如下所示超出预期......现在他已经确认将使用您解决方案中的格式
  • 所以我提供的代码确实解决了你的问题?如果是这样,您可能不会接受这个答案,并且可能还会更新您的问题,以便这个替代解决方案是可以接受的。

标签: r json api jsonlite plumber


【解决方案1】:
library(tidyverse)
library(jsonlite)

reason_info <- data.frame(code        = c('AAA', 'BBB', 'CCC', NA, 'EEE'),
                          description = c('low value of point A',
                                          'low value of point B',
                                          'low value of point C',
                                           NA,
                                          'low value of point D'))

reason_info_new <- reason_info %>%
  mutate(new = apply(across(everything()), 1, as.list)) %>%
  pull(new)

full <- list(Name    = "John",
             Address = "Stret No. 1",
             Point   = "600",
             reason = reason_info_new)

myJSON <- toJSON(full, pretty = TRUE, auto_unbox = TRUE)
myJSON

给出:

{
  "Name": "John",
  "Address": "Stret No. 1",
  "Point": "600",
  "reason": [
    {
      "code": "AAA",
      "description": "low value of point A"
    },
    {
      "code": "BBB",
      "description": "low value of point B"
    },
    {
      "code": "CCC",
      "description": "low value of point C"
    },
    {
      "code": null,
      "description": null
    },
    {
      "code": "EEE",
      "description": "low value of point D"
    }
  ]
} 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-02
    • 1970-01-01
    • 2022-01-16
    • 2012-05-21
    • 1970-01-01
    相关资源
    最近更新 更多