我有一个提供哈希列表的 JSON 数据源:
[
{ "a": "foo",
"b": "sdfshk"
},
{ "a": "foo",
"b": "ihlkyhul"
}
]
我fromJSON()
在rjson
包中使用将其转换为 R 数据结构。它返回:
list(
structure(list(a = "foo", b = "sdfshk"), .Names = c("a", "b")),
structure(list(a = "foo", b = "ihlkyhul"), .Names = c("a", "b"))
)
我需要将其转换为R数据帧,但data.frame()
将其转换为具有四列的单行数据帧,而不是预期的 2x2 数据帧。我缺乏从一个到另一个的转换的 R-fu,尽管它看起来应该很简单。
奖励积分:
实际问题要复杂一些,因为 JSON 数据源不像我上面显示的那样有规律。它返回的对象类型不同。也就是说,每个中设置的字段可以是几种不同类型之一:
[
{ "a": "foo",
"b": "asdfhalsdhfla"
},
{ "a": "bar",
"c": "akjdhflakjhsdlfkah",
"d": "jfhglskhfglskd",
},
{ "a": "foo",
"b": "dfhlkhldsfg"
}
]
如您所见,每个对象中的“a”字段是一个类型标记,指示该对象将具有哪些其他字段。
我不太特别注意解决方案如何处理这个问题。
如果这两种对象类型只是组合在一起,那就不会太可怕了,所以你会得到 a、b、c 和 d 列,并且这些行只是具有N/A
或NULL
JSON 源对象没有给定值的值场地。我相信我可以用subset(df, a == "foo")
. 这样我会得到一些空列,但这对我的程序无关紧要。
如果该解决方案提供一种方法来选择哪些 JSON 源行进入数据框以及哪些被拒绝,那就更好了,这样结果就只有实际需要的列和行。