r - 如何在 R 中解析堆叠的嵌套 JSON 文件?
问题描述
我正在尝试使用 R 来解析堆积的 JSON 消息文件,如下所示:
{"ts":1.592932195038E9,"accel1":[{"x":26125,"y":-29824,"z":-254468,"id":"3"},{"x":27508,"y":242227,"z":84591,"id":"4"},{"x":-250265,"y":41250,"z":-11000,"id":"5"},{"x":-16089,"y":-256369,"z":17448,"id":"7"}]}
{"ts":1.592932195058E9,"accel1":[{"x":26107,"y":-29807,"z":-254479,"id":"3"},{"x":27508,"y":242227,"z":84591,"id":"4"},{"x":-250265,"y":41250,"z":-11000,"id":"5"},{"x":-16089,"y":-256369,"z":17448,"id":"7"}]}
{"ts":1.592932195078E9,"accel1":[{"x":26107,"y":-29807,"z":-254479,"id":"3"},{"x":27490,"y":242252,"z":84604,"id":"4"},{"x":-250301,"y":41180,"z":-10922,"id":"5"},{"x":-16122,"y":-256392,"z":17390,"id":"7"}]}
...
因为消息是堆叠的,所以我无法使用 fromJSON 而是使用 jsonlite::stream_in 将每个 JSON 消息读入数据帧,如下所示:
flatten(jsonlite::stream_in(file("Data.json")))
其输出为:
ts accel1
1 1592932195 26125, 27508, -250265, -16089, -29824, 242227, 41250, -256369, -254468, 84591, -11000, 17448, 3, 4, 5, 7
2 1592932195 26107, 27508, -250265, -16089, -29807, 242227, 41250, -256369, -254479, 84591, -11000, 17448, 3, 4, 5, 7
3 1592932195 26107, 27490, -250301, -16122, -29807, 242252, 41180, -256392, -254479, 84604, -10922, 17390, 3, 4, 5, 7
...
R 现在将“accel1”中的所有列视为一个大列,并且隐藏或丢弃“x”、“y”、“z”和“id”。最重要的是,现在以不同的顺序(x,x,x,x,y,y,y,y,z,z,z,z,id,id,id,id
而不是所需的顺序x,y,z,id,x,y,z,id...
)读取数据我如何读取文件,以便“accel1”中的每一列都用自己的列名单独处理,并且可能以所需的顺序处理?
解决方案
我认为解决这个问题的最简单方法可能是tidyr::unnest
:
### highlight the above and run this
js <- jsonlite::stream_in(textConnection(paste(readLines("clipboard"), collapse = "\n")))
# Imported 3 records. Simplifying...
unnest(js, accel1)
# # A tibble: 12 x 5
# ts x y z id
# <dbl> <int> <int> <int> <chr>
# 1 1592932195. 26125 -29824 -254468 3
# 2 1592932195. 27508 242227 84591 4
# 3 1592932195. -250265 41250 -11000 5
# 4 1592932195. -16089 -256369 17448 7
# 5 1592932195. 26107 -29807 -254479 3
# 6 1592932195. 27508 242227 84591 4
# 7 1592932195. -250265 41250 -11000 5
# 8 1592932195. -16089 -256369 17448 7
# 9 1592932195. 26107 -29807 -254479 3
# 10 1592932195. 27490 242252 84604 4
# 11 1592932195. -250301 41180 -10922 5
# 12 1592932195. -16122 -256392 17390 7
推荐阅读
- system-verilog - 顶部地址为 32'hFFFFFFFF 的 SystemVerilog 内存失败
- reactjs - 当我使用 redux 时,我是否应该始终将响应保持在全局状态,即使结果只会使用一次?
- java - 仅验证方法池中的特定交互
- magento2 - 在面板管理员中解锁编辑配置
- angularjs - 自定义多条形图?
- scala - 在 Apache Spark 中,如何将慢速 RDD/数据集转换为流?
- mysql - docker run 命令如何转换为 docker compose 文件?
- android - 如何重建 whats 应用程序主菜单(带有 fab 的 viewpager)
- python - 跨平台构建在 gitlab-ci
- javascript - 如何在 flex 容器中的每个项目上覆盖文本 + 图像?