在我的项目中,我需要使用谷歌api来收集一些计算的统计数据。如果您愿意,可以使用提供的链接找到原始的json
对象字段。
项目需要保留的数据比实际少得多。例如,我对下一个json
节点感兴趣:
"id",
"kind",
"lighthouseResult.audits.metrics",
"lighthouseResult.audits.time-to-first-byte"
或者
{
"id": "myId",
"kind": "myKind",
"lighthouseResult": {
"audits": {
"metrics": ["myMetrics"],
"time-to-first-byte": ["myOtherMetrics"]
}
}
}
首先,我尝试使用graphql解决这个问题。我的第一个问题就在那里。我使用谷歌图书馆提供的pojo
类来避免重复。在节点成为映射之前,我为graphql指定了必需的对象描述。结果,我无法描述应该为我的请求过滤哪些映射键。关于指定问题的问题由不同的人发布,但尚未回答。
所以我的下一个尝试是使用任何json处理库来删除所有与我的配置无关的冗余节点。现在我试着用:
"$.id",
"$.kind",
"$.lighthouseResult.audits.metrics",
"$.lighthouseResult.audits.time-to-first-byte"
但解决方案应该是灵活的,并且可以在java之外进行配置(在任何属性文件中)。因此,重要的是要有一个安全的机会,所有的匹配者在删除时间作出正确的决定。
对我来说,有两种方法可以获得所需的信息:
我希望有更好的决策来达到目标,并且需要有用的建议,如果您有一个优雅的解决方案,可能是代码示例。
作为临时解决方案,我考虑使用:
<dependency>
<groupId>com.jayway.jsonpath</groupId>
<artifactId>json-path</artifactId>
</dependency>
库提供获取到每个节点的路径列表。
Configuration jsonConf = Configuration.builder().options(Option.AS_PATH_LIST, Option.SUPPRESS_EXCEPTIONS).build();
DocumentContext pathList = JsonPath.parse(json, jsonConf);
路径列表不完全是路径列表。这种配置DocumentContext
的方式提供了匹配路径列表(Option.AS_PATH_LIST
)没有例外(选项。SUPPRESS_EXCEPTIONS
)。
要收集所需的路径,我尝试遵循下一个逻辑:
WHILE FROM 1 to N
PARSING JSON WITH MATCHER DEPENDENT ON INDEX VALUE
COLLECTING TO LIST
END
REMOVE FROM LIST MATCHERS SPECIFIED MATCHERS IN CONFIGURATION
REMOVE FROM JsonPath.parse(json) ALL NODES BY LEFT MATCHERS
匹配路径示例:
Collection<? extends String> read = pathList .read("$.*");
Collection<? extends String> read = pathList .read("$.*.*");
...
Collection<? extends String> read = pathList .read("$.*...*");
删除节点及其子节点示例:
JsonPath.parse(json).delete(path)
我没有提供所有的代码,因为想法必须是注意力的中心。在java
中阅读代码看起来有点复杂(处理性能情况并使其以动态方式工作)。例如:
>
4.1筛选器如果在结果集合中有用于删除该集合的父级,则将该集合路由出去。
4.2配置的匹配器应用于从路径列表
中删除其子级。
使用过滤路径删除JsonPath.parse(json)
中的所有内容。
问题内容: 我已经在$ PATH变量中定义了6次相同的路径。 我没有注销来检查它是否有效。 如何删除重复项? $ PATH变量如下所示: 我如何将其重置为 问题答案: 您只需执行: 如果您想永久更改,则将其添加到当前会话中,将其添加到任何.bashrc,bash.bashrc,/ etc / profile- 适合您的系统和用户需求的位置。 注意:这是针对Linux的。对于新的编码器,我们将予以明
问题内容: 不幸的是,新的Core Data语义使我发疯。我之前的问题有一个干净的代码,因为头文件的自动生成不正确,因此无法正常工作。现在,我继续删除对象的工作。我的代码似乎很简单: 我用代替进行了“硬”调试,它向我展示了正确的对象。所以我只需要删除它。 PS没有。现在NSManagedContext只有 问题答案: 在您的情况下,提取的结果是托管对象 的 数组,因此您可以枚举该数组并删除所有匹配
所以我有这个方法: 根据这篇文章: save方法没有任何作用。即使我们删除了它,Hibernate仍然会发出UPDATE语句,因为只要当前正在运行的EntityManager处于打开状态,实体是受管理的,任何状态更改都会传播。 并且确实发出了update语句,但是如果我在没有< code>@Transactional注释的情况下运行该方法: HiberNate不会发出更新语句,因此必须显式调用。
问题内容: 我有一个看起来像这样的json数组: 我想有一个函数来删除“孩子”为空的元素。我该怎么做?我不是要答案,只是建议 问题答案: 要遍历对象的键,请使用循环: 要测试空元素的所有元素,可以使用递归方法:遍历所有元素,然后也递归地测试它们的孩子。 可以使用关键字删除对象的属性: 说明文件: https://developer.mozilla.org/zh-CN/docs/JavaScript
问题内容: 我有以下两个实体: 1-播放列表: *保存或更新播放列表实体时,需要使用 *CascadeType.ALL 来保存和更新PlaylistadMap集合。 orphanRemoval = true :在删除播放列表实体时需要,PlaylistadMap引用也应删除。 2- PlaylistadMap: 使用我删除播放列表时,出现以下异常: 请告知如何解决此异常。 问题答案: 将 Fetc
问题内容: 我收到上述错误“ org.hibernate.ObjectDeletedException:被删除的对象将通过级联重新保存(从关联中删除已删除的对象):”。有人可以帮我这个问题是什么,应该怎么解决? 谢谢。 问题答案: 没有映射结束代码会有点困难…这通常是由于要删除与集合关联的对象引起的。 您必须从拥有的收藏夹中删除对象,然后再删除对象 但是您可以通过这种方式使用deleteOrpha