以下是我正在使用的JSON数据片段:
{
"item" = "Mexican Thing",
...
"raised": "19",
"currency": "MXN"
},
{
"item" = "Canadian Thing",
...
"raised": "42",
"currency": "CDN"
},
{
"item" = "American Thing",
...
"raised": "1",
"currency": "USD"
}
你明白了。
我希望有一个函数可以接受一个标准货币缩写和一个数字,并输出合适的字符串。理论上,我可以自己写这篇文章,但我不能假装我知道这些东西的所有来龙去脉,我肯定会花上几天甚至几周的时间对我没有想到的错误或边缘案例感到惊讶。我希望已经有一个库(或者至少是一个web api(可以处理这个问题,但到目前为止,我的谷歌搜索还没有产生任何有用的结果。
下面是我想要的结果的一个例子(假设"货币"是我要找的函数(
currency("USD", "32") --> "$32"
currency("GBP", "45") --> "£45"
currency("EUR", "19") --> "€19"
currency("MXN", "40") --> "MX$40"
假设您真正的json是有效的,那么它应该相对简单。我将提供一个有效的json字符串,修复这里的三个无效部分:=
应该是:
;CCD_ 3显然是一个占位符;并且它应该是封装在[
和]
:中的列表
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"
编辑:为了更改为特定的货币字符,请不要太难:只需实例化一个查找向量,其中"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"
我有意将"MXN"
排除在矢量之外,以证明您需要默认设置"?"
(前/后(。您可以选择其他默认/未知货币值。
另一种选择:
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"