R - 为 Adobe Analytics API 调用创建 JSON - 有条件地定义对象
R - Create JSON for Adobe Analytics API call - define object conditionally
我有以下代码来创建一个 JSON 来调用 Adobe 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])
}
我有以下代码来创建一个 JSON 来调用 Adobe 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])
}