将JSON字符串(JSON对象数组)反序列化回R类数组

将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",

我在p2(类)的属性“标记”中获得了以下内容:

但我不需要JSON对象数组。我只需要
{“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){

PetObject
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类”是什么意思。

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"}