【问题标题】:R - Create JSON for Adobe Analytics API call - define object conditionallyR - 为 Adob​​e Analytics API 调用创建 JSON - 有条件地定义对象
【发布时间】:2017-12-30 08:05:46
【问题描述】:

我有以下代码来创建一个 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 的调用的解决方案。

【问题讨论】:

  • 查看第87-97行here,最终输出将是一个更容易操作的数据框
  • @parth thx 的建议,但我相信这个函数更多的是用于将 json 格式保存为 data.frame。我没有看到创建 data.frame 和相应的 json 结构的附加值。但是,您的提示帮助我找到了可能的答案,这在我自己对我的问题的回答中进行了解释。

标签: json r list api adobe-analytics


【解决方案1】:

一旦使用list 函数创建“JSON 相似结构”:

 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])
}

【讨论】:

    猜你喜欢
    • 2023-04-01
    • 1970-01-01
    • 2017-01-09
    • 2014-08-12
    • 1970-01-01
    • 1970-01-01
    • 2019-08-17
    • 1970-01-01
    • 2019-12-20
    相关资源
    最近更新 更多