使用rjson / jsonlite在R中构造请求有效负载

时间:2015-07-08 00:36:48

标签: json r rjson jsonlite

我现在的代码如下所示尝试构建一个请求有效负载(正文),但是没有给我所需的结果。

library(df2json)
library(rjson)

y = rjson::fromJSON((df2json::df2json(dataframe)))
globalparam = ""

req = list(
  Inputs = list(
    input1 = y
  )
  ,GlobalParameters = paste("{",globalparam,"}",sep="")#globalparam
)
body = enc2utf8((rjson::toJSON(req)))

body目前证明是

{
    "Inputs": {
        "input1": [
            {
                "X": 7,
                "Y": 5,
                "month": "mar",
                "day": "fri",
                "FFMC": 86.2,
                "DMC": 26.2,
                "DC": 94.3,
                "ISI": 5.1,
                "temp": 8.2,
                "RH": 51,
                "wind": 6.7,
                "rain": 0,
                "area": 0
            }
        ]
    },
    "GlobalParameters": "{}"
}

但是,我需要它看起来像这样:

{
  "Inputs": {
    "input1": [
      {
    "X": 7,
    "Y": 5,
    "month": "mar",
    "day": "fri",
    "FFMC": 86.2,
    "DMC": 26.2,
    "DC": 94.3,
    "ISI": 5.1,
    "temp": 8.2,
    "RH": 51,
    "wind": 6.7,
    "rain": 0,
    "area": 0

      }
    ]
  },
  "GlobalParameters": {}
}

所以基本上全局参数必须是{},但不是硬编码。这似乎是一个相当简单的问题,但我无法修复它。请帮忙!

编辑:

这是数据框

  X Y month day FFMC  DMC    DC ISI temp RH wind rain area
1 7 5   mar fri 86.2 26.2  94.3 5.1  8.2 51  6.7  0.0    0
2 7 4   oct tue 90.6 35.4 669.1 6.7 18.0 33  0.9  0.0    0
3 7 4   oct sat 90.6 43.7 686.9 6.7 14.6 33  1.3  0.0    0
4 8 6   mar fri 91.7 33.3  77.5 9.0  8.3 97  4.0  0.2    0

这是另一个数据框的示例

> a = data.frame("col1" = c(81, 81, 81, 81), "col2" = c(72, 69, 79, 84))

1 个答案:

答案 0 :(得分:1)

使用此样本数据

dd<-read.table(text="  X Y month day FFMC  DMC    DC ISI temp RH wind rain area
1 7 5   mar fri 86.2 26.2  94.3 5.1  8.2 51  6.7  0.0    0", header=T)

你可以做到

globalparam = setNames(list(), character(0))

req = list(
  Inputs = list(
    input1 = dd
  )
  ,GlobalParameters = globalparam
)
body = enc2utf8((rjson::toJSON(req)))

请注意,globalparam看起来有点滑稽,因为我们需要强制它到rjson的命名列表才能正确对待它。我们只需在空的时候这样做。