首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用OpenRefine (或R)解析大型复杂Json文件的最佳方法

用OpenRefine (或R)解析大型复杂Json文件的最佳方法
EN

Stack Overflow用户
提问于 2016-11-21 08:21:11
回答 2查看 1.9K关注 0票数 4

我知道如何在中解析json单元,但是这个对我来说太棘手了。

我使用了一个API来提取4730 AirBNB的房间的日历,由他们的ID识别。

下面是一个Json文件的示例:条件

对于从现在到2017年11月的每一个ID和一年中的每一天,我想提取这个房间的可用性(正确还是错误)以及它的价格在这一天。

我不知道如何解析这些信息。我猜这意味着一系列嵌套的forEach,但是我无法找到正确的方法来使用来实现这一点。

我当然试过了,

代码语言:javascript
复制
forEach(value.parseJson().calendar_months, e, e.days) 

结果是一连串的字典干扰了我。

任何帮助都会很感激的。如果操作过于困难,那么使用R(或Python)的解决方案对我来说也很好。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-11-21 09:25:33

我认为你走在正确的轨道上。产出:

代码语言:javascript
复制
forEach(value.parseJson().calendar_months, e, e.days) 

很难阅读,因为OpenRefine和JSON都使用方括号来表示数组。从这个表达式中得到的是一个OR数组,它包含12项(一年中每个月一项)。OR数组中的项是JSON --每个项目都是一个月中的天数数组。

为了使这些步骤易于管理,我建议这样处理:

首次使用

代码语言:javascript
复制
forEach(value.parseJson().calendar_months,m,m.days).join("|")

您必须使用“联接”,因为OR不能将OR数组直接存储在单元格中--它必须是字符串。

然后使用"Edit单元->拆分的多值单元格“-这将为每个ID获得12行,每个ID包含一个JSON表达式。现在,对于每个ID,在OR中有12行

然后使用:

代码语言:javascript
复制
forEach(value.parseJson(),d,d).join("|")

这就将JSON分解为单独的几天

然后再次使用“编辑单元格->拆分多值单元格”将每天的细节分割成自己的单元格。

使用上面示例URL中的JSON (这为单个ID提供了441行),每个行都包含描述一天可用性和价格的JSON。此时,您可以使用ID列上的“填充”函数来填充每一行的ID。

您现在已经在每个单元中获得了一些非常简单的JSON,因此您可以使用

代码语言:javascript
复制
value.parseJson().available

等。

票数 1
EN

Stack Overflow用户

发布于 2016-11-22 05:04:30

而不是仅仅将您的项目创建为文本,并使用GREL来解析.

最好的方法是选择您想要使用的JSON记录部分,使用我们针对JSON文件和XML文件的视觉导入向导(您甚至可以使用指向JSON文件的URL,如您的示例所示)。(视频教程展示了这里如何:https://www.youtube.com/watch?v=vUxdB-nl0Bw )

  1. 选择包含要解析和处理的记录的JSON部分(这可以是任何重复部分,只需选择其中一个,OpenRefine将提取所有其余部分)

  1. 限制要在创建过程中加载的数据行的数量,或者保留所有行的默认值。

  1. 单击“创建项目”,然后单击“您的行”模式。但是,如果您认为record模式可能更适合上下文,那么只需将项目再次导入为JSON,然后选择内容的下一个外部区域,可能是包含键字段的更大数组,等等。在示例中,键字段可能是日期,以及为什么我突出显示给定日期的整个记录。通过这种方式,OpenRefine将为每个记录和记录模式提供密钥,使您能够比行模式更好地处理它们。

请随意使用此示例,使其更好,甚至更有帮助,将其添加到如何使用上的Wiki部分。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40715596

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档