标签: jsonlite

使用对象而不是数组将 R 数据帧嵌套到 JSON

我需要将数据帧转换为 JSON。数据框中有几个嵌套的数据框作为变量来转换为 JSON。

但是,当转换为 JSON 时,我需要将下面描述的数据Values1作为对象({}仅包含在 中)而不是数组(包含在 中[])。

下面的代码是一个表示,显示我当前的工作流程和问题。

library(dplyr)
library(tidyr)
library(jsonlite)

df1 <- data.frame(name = c("a", "b", "c"),
                 v = c(1, 2, 3),
                 w = c(10, 20, 30)) %>%
  group_by(name) %>%
  nest_legacy(.key = "Values1")

df2 <- data.frame(name = c("a", "b", "c"),
                  x = c(5, 10, 15),
                  y = c(100, 200, 300),
                  z = c(1000, 2000, 3000)) %>%
  group_by(name) %>%
  nest_legacy(.key = "Values2")

df3 <- df1 %>%
  left_join(df2)

json <- toJSON(df3, dataframe = "rows", …
Run Code Online (Sandbox Code Playgroud)

json nested r dataframe jsonlite

6
推荐指数
1
解决办法
1082
查看次数

R - 将 R 模型序列化为 JSON

是否有一些好的 R 包可以将预测模型和其他复杂对象与 JSON 相互转换?我从这个例子中得到了线性回归模型:

eruption.lm = lm(eruptions ~ waiting, data=faithful) 
newdata = data.frame(waiting=80)
predict(eruption.lm, newdata) 
Run Code Online (Sandbox Code Playgroud)

我想将 eruption.lm 模型序列化为 JSON 将其存储在某处或将其发送到某个外部系统,然后对其进行反序列化并进行预测。我尝试过使用jsonlite R 包

json<-serializeJSON(eruption.lm)
lin.model<-unserializeJSON(json)

predict(lin.model, newdata)
Run Code Online (Sandbox Code Playgroud)

但是,jsonlite 无法处理复杂的对象——反序列化​​模型在预测中返回错误:

Error in eval(expr, envir, enclos) : could not find function "list"
Run Code Online (Sandbox Code Playgroud)

是否有一些更好的包可以序列化/反序列化对象。

serialization json r jsonlite

5
推荐指数
1
解决办法
1762
查看次数

我如何使用jsonlite R包将长度为1的R向量编码为json中的单个值?

我正在尝试使用jsonlite包和toJSON函数将R列表编码为json。我有一个简单的项目,例如:

list(op='abc')
Run Code Online (Sandbox Code Playgroud)

我希望成为:

{
  "op" : "abc"
}
Run Code Online (Sandbox Code Playgroud)

相反,我得到:

{
  "op" : ["abc"]
}
Run Code Online (Sandbox Code Playgroud)

我试图向其提供json的API扼流圈,并要求前者。关于如何从jsonlite(或另一个R json包)获取以前的行为的任何建议吗?

json r jsonlite

5
推荐指数
1
解决办法
563
查看次数

将数据帧转换为嵌套 json 格式

我正在处理 ar 数据框,如下所示。

       id    date           items        price
       10    2014/09/13     shoes        187
       10    2014/09/13      belt         35
       10    2014/09/14     shirt         69
       12    2014/10/01     dress         58
       12    2014/10/01       bag        118
       12    2015/01/03     shoes        115

purchase = structure(list(id = c(10, 10, 10, 12, 12, 12), date = structure(c(1L, 
1L, 2L, 3L, 3L, 4L), .Label = c("2014/09/13", "2014/09/14", "2014/10/01", 
"2015/01/03"), class = "factor"), name = structure(c(5L, 2L, 
4L, 3L, 1L, 5L), .Label = c("bag", "belt", "dress", "shirt", 
"shoes"), class = "factor"), price = c(187, 35, …
Run Code Online (Sandbox Code Playgroud)

json r jsonlite

5
推荐指数
1
解决办法
1861
查看次数

如何将数据合并到 R 中预先存在的 JSON 结构中?

第一次发帖,长期潜伏。要温柔。中等 R 用户。我确信有一种更好的、更实用的方式来做我需要的事情,但我觉得我在没有洞察力的情况下研究了死亡。

我正在尝试将数据集合并到预先存在的 JSON 结构。对于许多序列化的 JSON 请求,每个 JSON 结构有一行记录。

我将数据集加载到包含 13 个变量的数据并更改列标题以匹配它们在 JSON 结构中的显示方式

library(jsonlite)
#### Map Column headers to their respective names in the JSON Structure
colnames(data) <- c("default.A",
                    "default.B",
                    "default.C",
                    "items.A",
                    "items.B.1",
                    "items.B.2",
                    "items.B.3",
                    "items.B.4",
)
Run Code Online (Sandbox Code Playgroud)

创建空白的 JSON 结构。这是需要处理 JSON 请求的格式。简单的嵌套结构。

sample <- '{
      "default": {
           "A": "",
           "B": "",
           "C": "",
            },
      "items": [{
           "A": "",
           "B": {
                "1": "",
                "2": "",
                "3": "",
                "4": "",
                     }
                }]
           }'

jsonstructure <- fromJSON(sample)
Run Code Online (Sandbox Code Playgroud)

将所有内容都设置为 DF。合并它们。用空格填充 NA

x …
Run Code Online (Sandbox Code Playgroud)

json r jsonlite

5
推荐指数
1
解决办法
1003
查看次数

从R中geojson的末端删除括号[]

我正在尝试将 geojson 作为空间对象(即 sp)从 USGS Web 服务(streamstats)导入到 R 中,但无法将其转换为 R 的正确格式。

library(jsonlite)
mydata <- fromJSON("https://streamstats.usgs.gov/streamstatsservices/watershed.geojson?rcode=NY&xlocation=-74.524&ylocation=43.939&crs=4326&includeparameters=false&includeflowtypes=false&includefeatures=true&simplify=true")
Run Code Online (Sandbox Code Playgroud)

这将返回 geojson 中的功能以及一堆我不需要的其他东西。我可以只选择我需要的数据框并将其写出:

tmp <- mydata$featurecollection[2,2]
write_json(tmp, 'test.json')
Run Code Online (Sandbox Code Playgroud)

[{"type": "FeatureCollection", ...一堆其他东西}]

如果我手动删除 json 文件两端的括号“[]”,则可以将其作为空间对象导入:

library(geojsonio)
test <- geojson_read('test.json', method='local', what='sp')
Run Code Online (Sandbox Code Playgroud)

否则我会收到此错误:

rgdal::ogrListLayers(input) 中的错误:无法打开数据源

有没有办法去掉两端的括号?也许我还缺少一个更简单的解决方案,我从中选择了所需的数据框。

json r geojson jsonlite

5
推荐指数
1
解决办法
1466
查看次数

不带外部方括号的 toJSON

我正在使用 jsonlite 中的 toJSON() 将特定结构(API 所需)的嵌套列表转换为 JSON。但是,我需要最终的 JSON 不包含外部方括号(API 也需要)。

test_list <- list(
    list(formName = "test_title", user_id = "test_userid", rows = list(list(row = 0))), 
    list(formName = "test_title2", user_id = "test_userid2", rows = list(list(row = 0)))
)

jsonlite::toJSON(test_list, pretty = TRUE, auto_unbox = TRUE)
Run Code Online (Sandbox Code Playgroud)

这使:

[
  {
    "formName": "test_title",
    "user_id": "test_userid",
    "rows": [
      {
        "row": 0
      }
    ]
  },
  {
    "formName": "test_title2",
    "user_id": "test_userid2",
    "rows": [
      {
        "row": 0
      }
    ]
  }
] 
Run Code Online (Sandbox Code Playgroud)

但我需要删除第一个和最后一个方括号。

我可以使用 purrr::flatten() 删除列表的顶层,从而删除 JSON 中的方括号,但 toJSON() 似乎不喜欢列表有重复的名称,并将它们重命名为 …

r jsonlite purrr

5
推荐指数
2
解决办法
3303
查看次数

发出 API 请求时使用 httr 包进行身份验证

我正在学习如何使用 R 中的 API 获取数据。我知道其目的httr是为curl 包提供一个包装器。\n我为了向 API 发出请求而遵循的文档具有以下 HTTP 请求格式。下面的代码将用于生成令牌

\n\n
curl -s \\\n     -d "client_id=clientid\xe2\x80\x9d \\\n     -d "username=user\xe2\x80\x9d \\\n     -d "password=pwd\xe2\x80\x9d \\\n     -d "grant_type=password" \\\n     -d "scope=openid email" \\\n     "https://auth.com/token"\n
Run Code Online (Sandbox Code Playgroud)\n\n

之后,我将使用令牌通过此请求与 API 进行通信

\n\n
curl --header "Content-Type: application/json" \\\n     --header "Accept: application/+json" \\\n     --header "Authorization: Bearer token_goes_here\xe2\x80\x9c \\\n     --request GET \\\n     --url "https://api-sitename.org/sections?parent_id=0"\n
Run Code Online (Sandbox Code Playgroud)\n\n

最初,我在终端中运行这两个请求,它们成功了,我收到了 JSON 格式的响应。我的问题是,如何在 R 脚本中运行这些请求,以便获得响应并将它们存储在 R studio 全局环境中?我的目标是最终将数据集从API加载到Rstudio工作环境中。\nT

\n

api r httr jsonlite

5
推荐指数
1
解决办法
5531
查看次数

R中的JSON(使用jsonlite)解析错误

我有以下JSON文件:

{"id":1140854908,"name":"'Amran"} 
{"id":1140852651,"name":"'Asir"} 
{"id":1140855190,"name":"'Eua"} 
{"id":1140851307,"name":"A Coruna"} 
{"id":1140854170,"name":"A`Ana"}
Run Code Online (Sandbox Code Playgroud)

我使用了jsonlite软件包,但遇到了解析错误

library(jsonlite) 
try <- fromJSON("states.txt",simplifyDataFrame = T)
# Error in feed_push_parser(readBin(con, raw(), n), reset = TRUE) :   
# parse error: trailing garbage
#           :1140854908,"name":"'Amran"} {"id":1140852651,"name":"'Asir"
#                      (right here) ------^
Run Code Online (Sandbox Code Playgroud)

json r dataframe jsonlite

4
推荐指数
1
解决办法
2383
查看次数

通过使用 jsonlite 转换包含大量数字的 json 字符串得到错误的结果

这是 MWE,如何获得正确的数字作为字符。

require(jsonlite)

j <- "{\"id\": 323907258301939713}"
a <- fromJSON(j)

print(a$id, digits = 20)
class(a$id)

a$id <- as.character(a$id)
a$id
class(a$id)
Run Code Online (Sandbox Code Playgroud)

这是输出。

Loading required package: jsonlite
Loading required package: methods
[1] 323907258301939712
[1] "numeric"
[1] "323907258301939712"
[1] "character"
Run Code Online (Sandbox Code Playgroud)

我想获得确切的数字323907258301939713作为字符a

json r jsonlite

4
推荐指数
1
解决办法
396
查看次数

标签 统计

jsonlite ×10

r ×10

json ×8

dataframe ×2

api ×1

geojson ×1

httr ×1

nested ×1

purrr ×1

serialization ×1