Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 检测并从JSON对象中删除冗余节点以保存核心结构_Java_Json - Fatal编程技术网

Java 检测并从JSON对象中删除冗余节点以保存核心结构

Java 检测并从JSON对象中删除冗余节点以保存核心结构,java,json,Java,Json,在我的项目中,我需要收集一些经过计算的统计数据。原始json对象字段,如果您愿意,可以使用提供的链接找到 项目需要保留的数据比实际情况少得多。例如,我对nextjson节点感兴趣: "id", "kind", "lighthouseResult.audits.metrics", "lighthouseResult.audits.time-to-first-byte" 或 首先,我尝试使用。我的第一个问题就在那里。我使用谷歌图书馆提供的pojo类来避免重复。我为节

在我的项目中,我需要收集一些经过计算的统计数据。原始
json
对象字段,如果您愿意,可以使用提供的链接找到

项目需要保留的数据比实际情况少得多。例如,我对next
json
节点感兴趣:

    "id",
    "kind",
    "lighthouseResult.audits.metrics",
    "lighthouseResult.audits.time-to-first-byte"

首先,我尝试使用。我的第一个问题就在那里。我使用谷歌图书馆提供的
pojo
类来避免重复。我为节点指定了所需的对象描述,直到节点成为映射为止。结果,我无法描述应该为我的请求过滤哪些映射键。由不同的人发布,但尚未答复

因此,我的下一个尝试是使用任何json处理库删除所有与我的配置无关的冗余节点。现在我正在尝试使用:

    "$.id",
    "$.kind",
    "$.lighthouseResult.audits.metrics",
    "$.lighthouseResult.audits.time-to-first-byte"
但解决方案应该是灵活的,并且可以在java之外进行配置(在任何属性文件中)。因此,重要的是要有一个安全的机会,所有的匹配者在删除时间作出正确的决定

至于我,还有两种方法可以获得所需信息:

  • 使用json解析器库可以获取节点的路径。但是哪个库提供了类似的api呢
  • 从一开始就构建json对象,通过指定路径添加选定节点

  • 我希望有更好的决策来实现目标,并且需要有用的建议,如果您有一个优雅的解决方案,可能是代码示例。

    作为临时解决方案,我考虑使用:

    <dependency>
      <groupId>com.jayway.jsonpath</groupId>
      <artifactId>json-path</artifactId>
    </dependency>
    
    路径列表
    不完全是路径列表。这种配置
    DocumentContext
    的方式提供了匹配路径列表(
    选项。AS\u path\u list
    ),没有异常(
    选项。抑制异常

    为了收集所需的路径,我尝试了以下逻辑:

    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("$.*...*");
    
    附笔。 我并没有提供所有的代码,因为想法必须是关注的中心。在java中读取代码看起来有点复杂(处理性能案例并使其以动态方式工作)。例如:

  • 验证配置(如果未指定
    nestingLevel
    或未配置
    路径,则必须跳过逻辑)
  • 匹配的结果列表应按后序排序
  • 应该从配置的匹配器中清除结果集
  • 为了提高第一步的性能,我们可以按照通常的顺序对结果进行排序

    4.1筛选出集合的路径(如果它们有要删除的父级)(在结果集合中)

    4.2应使用配置的匹配器从
    路径列表中删除其子项

  • 使用过滤路径删除
    JsonPath.parse(json)
    中的所有内容


  • 作为临时解决方案,我考虑使用:

    <dependency>
      <groupId>com.jayway.jsonpath</groupId>
      <artifactId>json-path</artifactId>
    </dependency>
    
    路径列表
    不完全是路径列表。这种配置
    DocumentContext
    的方式提供了匹配路径列表(
    选项。AS\u path\u list
    ),没有异常(
    选项。抑制异常

    为了收集所需的路径,我尝试了以下逻辑:

    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("$.*...*");
    
    附笔。 我并没有提供所有的代码,因为想法必须是关注的中心。在java中读取代码看起来有点复杂(处理性能案例并使其以动态方式工作)。例如:

  • 验证配置(如果未指定
    nestingLevel
    或未配置
    路径,则必须跳过逻辑)
  • 匹配的结果列表应按后序排序
  • 应该从配置的匹配器中清除结果集
  • 为了提高第一步的性能,我们可以按照通常的顺序对结果进行排序

    4.1筛选出集合的路径(如果它们有要删除的父级)(在结果集合中)

    4.2应使用配置的匹配器从
    路径列表中删除其子项

  • 使用过滤路径删除
    JsonPath.parse(json)
    中的所有内容