R-使用转义引号创建字符串,并使用变量输入

时间:2019-02-05 12:44:45

标签: r quotes double-quotes

我需要创建具有确切内容的字符串,以便在API REST客户端中使用。

body =
      "{
        \"epic\":      \"sweden\",
        \"direction\": \"BUY\"
}"

我已经通过创建字符串而不使用变量来使用解决方案。我现在正在寻找使用来自变量的输入来构建字符串。

我需要一个不添加更多R软件包的解决方案。最好以最小的复杂度获得良好的概览。我希望避免使用长的正则表达式模式(但是如果正则表达式是一个很好的推荐方式,我愿意考虑)。

在attemp-1和try-2中,我故意省略了大括号,以使问题及其代码最小化。不过,大括号必须是解决方案的一部分。

到目前为止的尝试:

Attemp-1(粘贴解决):

epic1        <- paste0("\"", "sweden")
direction1   <- paste0("BUY", "\"")
create.body1 <- c(epic1, "," ,direction1)

结果:

"\"sweden" ","        "BUY\"" 

问题:每个提供的变量输入都带有引号。另外,每个键和值都只将转义符作为包装器添加到整个字符串周围,而不是按需添加。

Attemp-2(用[noQuote]带引号)

epic2        <- paste0("\"", "sweden")
direction2   <- paste0("BUY", "\"")
create.body2 <- noquote(c(epic2, "," ,direction2))

结果:

"sweden ,       BUY"   

问题:所需的转义字符反斜杠不见了。

Attemp-3(在构建主体字符串之前预先构建[键/值对]):

# Curly brackets.
curly.bracket.left <- "{"
curly.bracket.right <- "}"

# Epic build [key/pair]
epic_key   <- "\"epic\": "
epic_value <- "\"sweden\""
epic_pair  <- c(epic_key, epic_value)

# Direction build [key/pair]
direction_key   <- "\"direction\": "
direction_value <- "\"BUY\""
direction_pair  <- c(direction_key, direction_value)

# Construct body string.
build.body <- c(
                curly.bracket.left,
                epic_pair,
                direction_pair,
                curly.bracket.right
)

结果:

"{" "\"epic\": " "\"sweden\"" "\"direction\": " "\"BUY\"" "}" 

问题:正文字符串中有很多引号。所有[\“]都很好。

1 个答案:

答案 0 :(得分:1)

我从您的第三次尝试开始。结果看起来像您想要的。我只是将c()换成了paste(),并在模板中有空间的地方插入了一些空间。那是您需要的吗?

curly.bracket.left <- "{"
curly.bracket.right <- "}"

# Epic build [key/pair]
epic_key   <- "\"epic\": "
epic_value <- "  \"sweden\","
epic_pair  <- c(epic_key, epic_value)

# Direction build [key/pair]
direction_key   <- "\"direction\": "
direction_value <- "\"BUY\""
direction_pair  <- c(direction_key, direction_value)

# Construct body string.
build.body <- c(
  curly.bracket.left,
  epic_pair,
  direction_pair,
  curly.bracket.right
)

string <- paste(curly.bracket.left, epic_key, epic_value, direction_key, direction_value, curly.bracket.right)

> print(string)
[1] "{ \"epic\":    \"sweden\", \"direction\":  \"BUY\" }"