Если ваш реальный json действителен, это должно быть относительно просто. Я предоставлю действительную строку json, исправив здесь три недопустимые части: =
должно быть :
; ...
, очевидно, является заполнителем; и это должен быть список, обернутый в [
и ]
:
js <- '[{
"item": "Mexican Thing",
"raised": "19",
"currency": "MXN"
},
{
"item": "Canadian Thing",
"raised": "42",
"currency": "CDN"
},
{
"item": "American Thing",
"raised": "1",
"currency": "USD"
}]'
with(jsonlite::parse_json(js, simplifyVector = TRUE),
paste(raised, currency))
# [1] "19 MXN" "42 CDN" "1 USD"
Edit : чтобы изменить на указанные c символы валюты, не делайте это слишком сложно: просто создайте экземпляр lookup vector, где "USD"
(например) добавляет "$"
и ""
(ничего) к строке raised
. (Я говорю как добавление, так и добавление, потому что я считаю, что некоторые валюты всегда являются пост-цифрами ... Я могу ошибаться.)
pre_currency <- Vectorize(function(curr) switch(curr, USD="$", GDP="£", EUR="€", CDN="$", "?"))
post_currency <- Vectorize(function(curr) switch(curr, USD="", GDP="", EUR="", CDN="", "?"))
with(jsonlite::parse_json(js, simplifyVector = TRUE),
paste0(pre_currency(currency), raised, post_currency(currency)))
# [1] "?19?" "$42" "$1"
I намеренно оставил "MXN"
из vector здесь, чтобы продемонстрировать, что вам нужен параметр по умолчанию, "?"
(pre / post) здесь. Вы можете выбрать другое значение по умолчанию / неизвестное значение валюты.
Альтернативный вариант:
currency <- function(val, currency) {
pre <- sapply(currency, switch, USD="$", GDP="£", EUR="€", CDN="$", "?")
post <- sapply(currency, switch, USD="", GDP="", EUR="", CDN="", "?")
paste0(pre, val, post)
}
with(jsonlite::parse_json(js, simplifyVector = TRUE),
currency(raised, currency))
# [1] "?19?" "$42" "$1"