R - 为 Adob​​e Analytics API 调用创建 JSON - 有条件地定义对象

R - Create JSON for Adobe Analytics API call - define object conditionally

我有以下代码来创建一个 JSON 来调用 Adob​​e Analytics API (method segment.save)

item <- 
  list(definition = list(
    container = list (
      type = "hits",
      operator = "or",
      rules=I(list(
        list(value= "test1 test2",
             operator = "contains_any",
             element = "page")))

    )
  ),
  owner="test",
  reportSuiteID="test",
  description="API Generated Segment",
  name="test segment"
  )

美化和自动拆箱后,结果是:

> jsonlite::toJSON(item, pretty = T, auto_unbox= T) 
{
  "definition": {
    "container": {
      "type": "hits",
      "operator": "or",
      "rules": [
        {
          "value": "test1 test2",
          "operator": "contains_any",
          "element": "page"
        }
      ]
    }
  },
  "owner": "test",
  "reportSuiteID": "test",
  "description": "API Generated Segment",
  "name": "test segment"
} 

适合创建新片段,但不适合编辑片段

JSON 结构有效,因为我能够创建新的段。但是,我想检查该段是否已经存在(使用 f.i。来自 randyzwitch RSiteCatalyst 包的 GetSegments() 函数并检查名称是否已经与创建的段一致)。如果细分已经存在,我想将 id 传递给 API 调用,这是用于编辑现有细分的方法。它应该看起来像:

 > jsonlite::toJSON(item, pretty = T, auto_unbox= T) 
{
  "definition": {
    ... 
  },
  "owner": "test",
  "reportSuiteID": "test",
  "description": "API Generated Segment",
  "name": "test segment",
  "id": "s1982XXXXXXXXX_XXXXX_XXXXX",
} 

是否可以在第一段代码中提供的list() 定义中进行if alike 语句?我想找到一个不需要 if 语句的解决方案来检查 segmentID 是否存在,并根据它生成带有 id 的调用或没有 id 的调用。

使用 list 函数创建 "JSON alike structure" 后:

 item <- 
      list(definition = list(
        container = list (
          type = "hits",
          operator = "or",
          rules=I(list(
            list(value= "test1 test2",
                 operator = "contains_any",
                 element = "page")))

        )
      ),
      owner="test",
      reportSuiteID="test",
      description="API Generated Segment",
      name="test segment"
      )

我们可以使用所需条件将新元素推送到此列表。例如,如果我们的段 ID 在具有名称段的数据框中,我们可以通过这种方式将此 ID 推送到 item

if (!is.na(segments$segmentID[i])) {
  item <- c(item, id=segments$segmentID[i])
}