R - Создать строку с экранированными кавычками, с вводом из переменных - PullRequest
0 голосов
/ 05 февраля 2019

Мне нужно создать эту строку с точным содержимым, чтобы использовать ее в клиенте API REST.

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

Я уже использую решение, создавая строку без вызова переменных.Я сейчас ищу построить строку с вводом из переменных.

Мне нужно решение, которое не добавляет больше пакетов R.Желательно с минимальной сложностью для хорошего обзора.Я надеюсь избежать длинных шаблонов регулярных выражений (но если регулярное выражение является хорошим рекомендуемым способом продвижения вперед, я готов это рассмотреть).

В попытке 1 и попытке 2 я намеренно исключил фигурные скобки, чтобы минимизировать вопрос и его код.Однако эти фигурные скобки должны быть частью решения.

Пока предпринимаются попытки:

Попытка-1 (решить с помощью пасты):

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

Результат:

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

Проблема: У каждого предоставленного ввода переменной есть кавычка.Кроме того, escape-символы добавляются только как обертка вокруг всей строки, а не по мере необходимости, для каждого ключа и значения.

Attemp-2 (вырезать кавычки с помощью [noQuote]):

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

Результат:

"sweden ,       BUY"   

Проблема: необходимые экранирующие символы, обратная косая черта, пропали.

Attemp-3 (pre-construct [пары ключ / значение] до построения строки тела):

# 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 голосов
/ 05 февраля 2019

Я начал с 3-й попытки.Результат выглядит как то, что вы после.Я просто переключил 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\" }" 

...