的R - 与转义引号创建的字符串,与输入变量

问题描述 投票:0回答:1

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

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

我已经通过,而无需调用变量创建的字符串使用该解决方案。现在我希望建立与变量输入的字符串。

我需要的是不添加更多的R程序包的解决方案。最好用最小的一个很好的概述复杂性。我希望避免长时间正则表达式模式(但如果正则表达式是一个很好的推荐的方式进,我愿意考虑它)。

在尝试1和尝试2,我特意留出了大括号,保持这个问题,并最小化其代码。大括号必须是解决方案的一部分,虽然。

迄今为止尝试:

尝试-1(用浆糊解决):

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

结果:

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

问题:每一个提供可变的输入大约有报价。此外,并非根据需要,按每个键和值转义字符只添加完整的串绕的包装。

学尝试-2(剥离出与[noQuote]引号):

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

结果:

"sweden ,       BUY"   

问题:需要转义字符,反斜杠,都走了。

尝试-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\"" "}" 

问题:有对身体串内的许多报价。所有[\“]都很好,虽然。

r quotes double-quotes
1个回答
1
投票

我从你的第三个尝试启动。结果看起来像你以后。我刚换C()的糊状()基本上,并插入一些空间,那里是你的模板空间。这就是你需要什么?

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\" }" 

© www.soinside.com 2019 - 2024. All rights reserved.