首页 > 解决方案 > 使用具有许多不同键的 R 巨大 json 进行解析

问题描述

背景

我有一个相对简单但巨大的 (~GB) json 文件,其结构如下

[{"a":92,"b":{"2019-01-01T00:00:14":102,"2019-01-01T00:01:15":123,...}},
 {"a":20,"b":{"2019-01-01T01:00:21":104,"2019-01-01T01:01:25":321,...}}]

嵌套结构中的句点 ... 表示该元素具有可变数量的条目,最多约 60 个。

最终,我希望能够使用以下两种结构中的任何一种来制作 R-data.frame(首选选项 1)

选项1

a, Time,                    Value
92, "2019-01-01T00:00:14",   102
92, "2019-01-01T00:01:15",   123
20, "2019-01-01T01:00:21",   104
20, "2019-01-01T01:01:25",   321

选项 2

a,  Time_1,                  Value_1, Time_2,                 Value_2, ...
92, "2019-01-01T00:00:14",   102,    "2019-01-01T00:01:15",   123
20, "2019-01-01T01:00:21",   104,    "2019-01-01T01:01:25",   321

在 R 中完成操作并不那么重要。我只关心最终数据是指定格式之一。


我是怎么想的

我已经能够编写一个 R 程序(使用 jsonlite 和 data.table)将 json 转换为具有第一个结构的 data.frame。然而,这种技术适用于高达 200MB 左右的文件。对于更大的文件,它只需要大量的时间。

一种方法可以是直接修改json对象的结构,有点像可以使用xslt来改变xml对象的结构。但我不知道有这样的工具。另一种方法是以某种方式指定 json 的结构,以便解析器提取信息。但我也不知道该怎么做。

此外,我刚刚找到了 R-package jqr,这听起来很有希望,但我不太明白如何使用它https://cran.r-project.org/web/packages/jqr/jqr.pdf


问题

我的主要问题是

  1. 文件真的很大
  2. 嵌套结构的键不是“唯一的”,因为它们是时间戳。因此,“标准”解析器会将每个唯一值转换为数据框的一列,其中键为列名,值对应的值,可能会生成很多列。

标签: pythonrjson

解决方案


推荐阅读