通过RapidMiner Server暴露“复杂”JSON
你好,世界!
我使用RapidMiner Server公开一个API,该API为自定义地图提供区域和坐标。每个区域可以包含至少三个坐标,自定义地图在这些坐标上创建绘图,并使用其他信息进行装饰。我目前有两个端点看起来像这样(其余的信息已被删除的清晰度):
区域:
(
{“id”:1、“区”:“区1”},
{“id”:2“区”:“区2”}
]
坐标:
(
{"id":1, "zone_id": 1, "x": 0, "y": 0},
{"id":2, "zone_id": 1, "x": 1, "y": 1},
{"id":3, "zone_id": 1, "x": 2, "y": 2},
{"id":4, "zone_id": 2, "x": 10, "y": 10},
{"id":5, "zone_id": 2, "x": 10, "y": 20},
{"id":6, "zone_id": 2, "x": 20, "y": 20},
{"id":7, "zone_id": 2, "x": 20, "y": 10}
]
最终将其作为JSON输出有多可行?
(
{“id”:1、“区”:“区1”,“坐标”:{" x ": 0,“y”:0},{“x”:1、“y”:1},{“x”:2,“y”:2}},
{“id”:2,“区”:“区2”,“坐标”:[{“x”:10“y”:10},{“x”:10“y”:20},{“y”:“x”:20日20},{“y”:“x”:20日10}]}
]
我们的想法是将坐标嵌入到结果中,作为一个数组,并公开它。目前,我将其公开为两个独立的API端点,但设计人员必须在客户端使用JavaScript正确构建对象(更不用说向RapidMiner服务器创建两个请求了,这并不理想),而且这种情况远非理想。
这次我没有提供XML,但是想象两个简单的“Retrieve”操作符连接到结果窗口。
我将感激你的帮助,提前感谢!
最佳答案
-
kayman 成员职位:662独角兽
这不是最优雅的方式,但使用连接、聚合和一些替换可以得到正确的结果。
根据您的示例,下面的工作(顺序有点不同,但本质上JSON不关心这个,如果需要,很容易修复)
<?xml version="1.0" encoding="UTF-8"?> <过程version = " 8.2.000”>
> <上下文
<输入/ >
<输出/ >
<宏/ >
> < /上下文
<过程扩展= " true " >
<过程扩展= " true " >
< /操作符>
<列出关键= " string_machting_queries " / >
<列出关键= " regular_expression_queries " / >
<列出关键= " regular_region_queries " / >
<列出关键= " xpath_queries " / >
<列出关键= "名称" / >
<列出关键= " index_queries " / >
<列出关键= " jsonpath_queries " >
<参数键="行"值="$。" / >
< / >列表
<过程扩展= " true " >
> < /过程
< /操作符>
<参数键=“文本”值= "[& # 10;{“id": 1、“zone_id": 1,“x": 0,“y": 0}, & # 10;{“id": 2,“zone_id": 1,“x": 1,“y": 1}, & # 10; & # 10;{“id": 3,“zone_id": 1,“x": 2,“y": 2}, & # 10; & # 10;{“id": 4,“zone_id": 2,“x": 10“y": 10}, & # 10; & # 10;{“id": 5,“zone_id": 2,“x": 10“y": 20}, & # 10; & # 10;{“id": 6“zone_id": 2,“x": 20,“y": 20}, & # 10; & # 10;{“id": 7,“zone_id": 2,“x": 20,“y": 10} & # 10; & # 10;] " / >
< /操作符>
<列出关键= " replace_dictionary " >
< / >列表
< /操作符>
<列出关键= " string_machting_queries " / >
<列出关键= " regular_expression_queries " / >
<列出关键= " regular_region_queries " / >
<列出关键= " xpath_queries " / >
<列出关键= "名称" / >
<列出关键= " index_queries " / >
<列出关键= " jsonpath_queries " >
<参数键="行"值="$。" / >
< / >列表
<过程扩展= " true " >
> < /过程
< /操作符>
> < /过程
< /操作符>
<列出关键= " key_attributes " >
< / >列表
< /操作符>
<过程扩展= " true " >
< /操作符>
< /操作符>
< /操作符>
< /操作符>
< /操作符>
<列出关键= " rename_additional_attributes " / >
< /操作符>
<列出关键= " aggregation_attributes " >
< / >列表
< /操作符>
<参数键="old_name"值="concat(坐标)"" / >
<列出关键= " rename_additional_attributes " / >
< /操作符>
> < /过程
< /操作符>
<过程扩展= " true " >
<列出关键= " replace_dictionary " >
<参数键= "“coords":“(. * ?)““value = "“coords": [{$ 1}] " / >
< / >列表
< /操作符>
> < /过程
< /操作符>
> < /过程
< /操作符>
> < /过程它是如何工作的:
首先,我们获取JSON导入并将其转换为适当的数据集,接下来我们连接x和y字段,同时将变量名称添加到数据本身。然后我们聚合所有的坐标并生成第一个json文件。这还不包含最终数据,但可以使用足够的“标记”来构建剩余的JSON逻辑,其中包含一些基本的查找/替换逻辑。
如前所述,它不是真正的高水平,也远非最佳,但它确实奏效了。
祝你好运!
2
答案
你好,世界!
我有新的数据。这是我在如何操作JSON方面有限的知识所能做的最远的事情。我仍然不能将“注册子类型”放入封闭字符串或可以帮助我实现预期结果的东西中。
有什么技巧可以让我生成想要的JSON文件吗?我仍在研究我的选择,只要这些不包括使用外部的东西来构建JSON
愿一切都好!
正如我们在其他线程中讨论的那样,RapidMiner处理复杂JSON格式的能力在某种程度上是有限的。我不知道你有什么办法让RapidMiner创建JSON文件与你想要的嵌套数组结构。但我很想看看社区中的其他专家是否有解决这个问题的方法!
Lindon合资企业
乐鱼平台进入来自认证RapidMiner专家的数据科学咨询
嗨,罗德里戈,
你能共享json文件或一些进程/脚本生成的数据?
看起来解决方案是zone_id上的连接,但我肯定错过了某个地方。
问候,
塞巴斯蒂安。
嗨,罗德里戈,
我挣扎了大约45分钟,还是没有得到它。RapidMiner目前还没有很好的JSON工具。也许有一些很好的Python库可以帮你完成这个任务?
斯科特
嗨@SGolbert,@sgenzer和@Telcontar120
以下是我的研究结果:
@SGolbert:加入,如果你有一个包含X个类别的示例集和另一个每个类别包含Y个元素的示例集,你将最终得到(XY)个示例集。我要找的是对我有帮助的东西包括一个例子集合是另一个例子集合中的一个属性,我称之为逆运算映射和压扁.这样,最终得到X个类别和每个类别中的数组(或散列)。
在查看了社区的大量评论(哇,确实是大量的!),搜索了一下,然后坐下来看RapidMiner的代码(因为我喜欢我的源代码,就像我喜欢我的思想一样:开放!#noblackboxes to core!)来看看这是否可行实现,似乎标准示例集的表格性质无法应对JSON的结构性质。
最后,它不是(或者至少不应该是)大量的工作来创建一个包括但我想知道实现其他东西是否实际,比如在训练模型或应用模型之前将对象预平坦化,以及是否应该考虑(创建这样的对象可能有助于实现来自RapidMiner Server的SOAP Web服务,这是一些大公司所期望的功能,并且可以利用实时评分系统,例如)。
感谢大家的回答!
附注:@sgenzer,把这个想法作为一个功能,一个新的插件,或者一个RapidMiner智慧黑客马拉松的想法听起来是不是太令人难以置信了?
愿一切都好!
@rfuentealba这么说吧——如果产品团队再听到我喊“api”和“JSON”,他们会掐死我的。
说真的,我们的朋友@Telcontar120有一个想法开放投票,欢迎您投票和评论。https://community.www.turtlecreekpls.com/t5/Product-Ideas/JSON-file-rotation/idi-p/49638
斯科特
嗨@kayman,
这看起来棒极了!谢谢你!我还没有对我的用例进行广泛的尝试,但看到了一些可能有助于我构建我正在编写的JSON扩展的东西。再次感谢!
愿一切都好!
罗德里戈。