将JSON字符串(JSON对象数组)反序列化回R类数组
我在p2(类)的属性“标记”中获得了以下内容: 但我不需要JSON对象数组。我只需要将JSON字符串(JSON对象数组)反序列化回R类数组,r,list,R,List,我在p2(类)的属性“标记”中获得了以下内容: 但我不需要JSON对象数组。我只需要{“id”:456,“name”:“unknown”} 下面是我的问题: 如何循环使用p2$tags 如何获取{“id”:456,“name”:“unknown”}而不是JSON对象数组 更新:这是服务器返回的JSON字符串 { "id": 123321, "category": { "id": 987, "name": "cat_test" }, "name": "test",
{“id”:456,“name”:“unknown”}
下面是我的问题:
如何循环使用p2$tags
如何获取{“id”:456,“name”:“unknown”}
而不是JSON对象数组
更新:这是服务器返回的JSON字符串
{
"id": 123321,
"category": {
"id": 987,
"name": "cat_test"
},
"name": "test",
"photoUrls": [
"photo_test",
"second test"
],
"tags": [
{
"id": 123,
"name": "tag_test"
},
{
"id": 456,
"name": "unknown"
}
],
"status": "available"
}
我通过jsonlite::fromJSON(server.response)$tags
我能够反序列化category
到R中的category类中,但我没有运气使用标记(JSON对象列表)来实现这一点。以下是执行反序列化的代码段:
fromJSONString = function(PetJson) {
PetObject <- jsonlite::fromJSON(PetJson)
self$`id` <- PetObject$`id`
self$`category` <- Category$new()$fromJSON(jsonlite::toJSON(PetObject$category, auto_unbox = TRUE))
self$`name` <- PetObject$`name`
self$`photoUrls` <- lapply(PetObject$`photoUrls`, function (x) x)
self$`tags` <- lapply(PetObject$`tags`, function(x) Tag$new()$fromJSON(jsonlite::toJSON(x, auto_unbox = TRUE)))
self$`status` <- PetObject$`status`
}
fromJSONString=function(PetJson){
PetObjectp2$tags[2,]
是一个数据帧,这就是为什么它被装箱在[
中成为一个数组。如果我们在子集中使用drop=TRUE
命令,它将是一个未装箱的列表
toJSON(p2$tags[2, ], auto_unbox = TRUE)
# [{"id":456,"name":"unknown"}]
toJSON(p2$tags[2, , drop = TRUE], auto_unbox = TRUE)
# {"id":456,"name":"unknown"}
类似地,如果我们调用x
读取您提供的对象的fromJSON()
toJSON(x$tags[2, , drop = TRUE], auto_unbox = TRUE)
# {"id":456,"name":"unknown"}
这回答了您的问题“如何获得{“id”:456,“name”:“unknown”}
而不是JSON对象数组?”我不知道您所说的“将JSON字符串反序列化为本机R类”是什么意思。p2$tags[2,]
是一个数据帧,这就是为什么它被装箱在[
是一个数组。如果我们在子集中使用drop=TRUE
命令,它将是一个未装箱的列表
toJSON(p2$tags[2, ], auto_unbox = TRUE)
# [{"id":456,"name":"unknown"}]
toJSON(p2$tags[2, , drop = TRUE], auto_unbox = TRUE)
# {"id":456,"name":"unknown"}
类似地,如果我们调用x
读取您提供的对象的fromJSON()
toJSON(x$tags[2, , drop = TRUE], auto_unbox = TRUE)
# {"id":456,"name":"unknown"}
这回答了您的问题“如何获得{“id”:456,“name”:“unknown”}
而不是JSON对象数组?”我不知道您所说的“将JSON字符串反序列化为本机R类”是什么意思。我不明白您想在这里得到什么。{“id”:456,“name”:“unknown”}
不是“东西”在R中。这应该是一个命名列表吗?你似乎是从JOSN开始的,但是你似乎也在使用toJSON
,所以我不知道你是想以R格式还是JSON格式结束数据。我真的不明白这里想要的输出是什么。只需删除方括号[
和]
从jsonlite::toJSON的输出中获取您想要的内容?我从服务器获得了结果(JSON字符串),我想将JSON字符串中的字段解析为R类或只是基本类型(例如字符),我可以对除“标记”之外的所有字段执行此操作。所需的结果是标记(类)列表。(基本上是将JSON字符串反序列化为本机R类)R中没有“标记”类(至少不在基本R中,您是否使用某种包?)。通常数据仅表示为命名列表。其中是Tag$new()
来自何方?我更希望你在问题中创建一个小的、说明性的例子……只是一个目标明确的例子。我不明白你想在这里结束什么。{“id”:456,“name”:“unknown”}
不是一个“东西”在R中。这应该是一个命名列表吗?你似乎是从JOSN开始的,但是你似乎也在使用toJSON
,所以我不知道你是想以R格式还是JSON格式结束数据。我真的不明白这里想要的输出是什么。只需删除方括号[
和]
从jsonlite::toJSON的输出中获取您想要的内容?我从服务器获得了结果(JSON字符串),我想将JSON字符串中的字段解析为R类或只是基本类型(例如字符),我可以对除“标记”之外的所有字段执行此操作。所需的结果是标记(类)列表。(基本上是将JSON字符串反序列化为本机R类)R中没有“标记”类(至少不在基本R中,您是否使用某种包?)。通常数据仅表示为命名列表。其中是Tag$new()
来自?我更希望您在问题中创建一个小的、说明性的示例…只有一个目标明确的示例。感谢@Gregor,我同意主题不是很清楚。我已经更新了问题,提供了更多信息,说明为什么我要将从服务器获得的JSON字符串转换回本机R类。或者另一个选项可能是unclass
当然,unclass
,as.list
,可能其他人也会这样做。谢谢@Gregor,我同意这个主题不是很清楚。我已经更新了这个问题,提供了更多信息,说明我为什么要将从服务器获取的JSON字符串转换回本机R类。或者另一个选项可能是unclass
当然,unclass
,as.list
,可能其他人也会这样做。
toJSON(p2$tags[2, ], auto_unbox = TRUE)
# [{"id":456,"name":"unknown"}]
toJSON(p2$tags[2, , drop = TRUE], auto_unbox = TRUE)
# {"id":456,"name":"unknown"}
toJSON(x$tags[2, , drop = TRUE], auto_unbox = TRUE)
# {"id":456,"name":"unknown"}