强大的JSON处理与jq

BalazsBaranyBalazsBarany 管理员,版主,员工,RapidMiner认证分析师,RapidMiner认证专家职位:871独角兽

金桥是处理JSON文档的命令行工具。它可以过滤、转换和重构文档,以我们想要的方式格式化它们。

我们必须处理的JSON文档正变得越来越复杂。Web api通常生成具有层次结构和可选元素的文档。

然而,数据挖掘需要表格结构,没有层次元素,如果可能的话,没有丢失数据。Jq帮助我们将输入文档的相关部分转换成这种形状。

考虑下面的示例文档:

{,,,"count": 3,    "category": "example",    “元素”:[,,,,,,,{,,,,,,,,,,,“id”:1,,,,,,,,,,,,,"description": "first element",         “标签”(“标签1”):,,,,,,,,},,,,,,,,,{,,,,,,,,,,,“id”:2,,,,,,,,,,,,,"description": "second element",        "optional": "optional元素",       “标签”:[],,,,,,,,},,,,,,,,,{,,,,,,,,,,,“id”:3,,,,,,,,,,,,,"description": "third element",        “标签”(“标签1”、“标签2”),,,,,,,,},,,,)}

这显示了复杂JSON文档的常见陷阱:

  • 不同层次上的元素:类别、元素/id等。
  • 可选元素:elements[2]/ Optional
  • 可变数量的元素:elements/tags

在RapidMiner中处理这种文档真的很难。如果你安装了Web挖掘扩展,你会得到JSON到XML;在文本处理中有JSON到数据。然而,JSON到XML在更复杂的文档中往往会失败JSON到数据生成一个包含数百或数千个属性的示例集,这些属性可能很复杂,或者无法使用一系列转置、枢轴和类似操作符来处理。

所以有人可能会想到jq。它可以用作处理数据的命令行实用程序。但最简单的尝试方法是在网上jqplay.org

让我们创建一个包含类别、元素id和标记的表。它的jq表达式是:

{count, category, elements: .elements[]} | {category, id: .elements。Id, tag: .elements.tags[]}

一开始肯定很吓人!但当你看到它时,它是由简单的元素组成的。您始终可以在jqplay中一步一步地执行它,以查看每个转换的效果。

在第一步(步骤由管道符号“|”分隔)中,声明要处理的元素。我们使用{}构建对象列表,从顶层获取count和category以及元素数组。重复Count和category来创建一个合适的表。

在第二步中,我们选择类别和对象id-s,它们之前处于不同的级别。标记被选择为一个数组。使用语法名称:.element.element我们可以选择元素并命名它们。此步骤的结果是一个表中具有类别、id和标记的对象列表,适合写入关系数据库或在数据挖掘工具中进行处理。

使用jq与RapidMiner

使用jq in处理这类文档会很有用RapidMiner。这就是我所做的,用jackson-jqjq的Java实现。本文附带了一个zip文件,其中包含必要的库和两个示例进程。

为了做好准备,我们需要将jackson-jq jar文件和两个依赖项复制到RapidMiner Studio lib目录中。然后我们就可以在内置的Groovy脚本操作符(Execute Script)中使用jq功能了。

为了简化应用程序,我创建了两个RapidMiner进程。这些可以在其他过程中使用。有一种变体适用于表(示例集),在这里您指定包含文档和转换结果的目标属性的输入属性的名称。另一种变体作用于Document对象,比如来自Get Page的对象。

在这两种情况下,都要指定jq表达式并设置输出选项。您可以缩进输出,并将结果转换为CSV。CSV格式的结果可以很容易地转换为示例集——这是一个常见的用例。

如果你想在jqplay中看到CSV输出,选中“Raw output”并添加以下内容:

[.category, .id, .tag] | @csv

这将创建一个数组(使用[]语法)并列出输出中的元素。将结果转换为@csv的一步。(如果选择csv输出,RapidMiner进程会自动执行此操作。)

这与jqplay中的一些练习一起,使进程能够将复杂的JSON文档转换为直接表。

要处理文档中的不同部分和结构,只需将其相乘并在副本上应用不同的jq表达式。


标记:
sgenzer rfuentealba MartinLiebig yyhuang jczogalla Pavithra_Rao
    登录注册置评。