这个问题听起来好像已经在SO上问过了,但是无论如何我还是要问一下,因为现有的答案对我不起作用,而且我不确定用什么更好的措词,因为我是R的新手,所以不要完全掌握其数据类型的复杂性。
时间为一个最小的例子。我正在寻找target
的转换形式,以使targetObject
精确等于referenceObject
。
reference = '{"airport":[{"name":"brussels","loc":{"lat":"1","lon":"2"}}],"parking":[{"name":"P1"}]}'
target = '{"airport":{"name":"brussels","loc":{"lat":"1","lon":"2"}},"parking":{"name":"P1"}}'
referenceObject = jsonlite::fromJSON(reference)$airport
x = jsonlite::fromJSON(target)$airport
# Transformation
targetObject = do.call(rbind.data.frame, x)
# Currently prints FALSE, should become TRUE
results_same = identical(referenceObject, targetObject)
print(results_same)
我希望这在任何语言中都非常简单,但是R似乎根据外部对象loc
的形状对嵌套airport
列表的处理方式非常不同。
答案 0 :(得分:0)
我设法通过序列化回JSON找到了解决方案。它并不优雅,但至少可以正常工作。
# Transformation
targetObject = jsonlite::fromJSON(jsonlite::toJSON(list(x), auto_unbox = TRUE))
目前,我不会将此答案标记为正确答案,因为它比意识形态的解决方案更能解决问题。