gpt4 book ai didi

java - 如何通过单次比较比较 2 个 json 过滤器和多个 json 路径?

转载 作者:行者123 更新时间:2023-12-02 06:03:48 31 4
gpt4 key购买 nike

有 2 个 json,需要在两个 json 上应用多个路径。然后这些 json 应该通过测试中的一些断言进行比较。 IDE 解决方案应该是:

Stirng actualJson - ....
Stirng expectedJson - ....
Stirng actualJsonFiltered - filter(actualJson, lisofJsonPath);
Stirng expectedJsonFiltered - filter(expectedJson, lisofJsonPath);

JSONAssert.assertEquals(actualJsonFiltered, expectedJsonFiltered);

什么是不是解决方案:1. 任何类似的代码:

for(String p: lisofJsonPath) {
assertEquals(JsonPath.read(actualJson, p), JsonPath.read(expectedJson , p);
}

需要过滤 jsons 并显示/失败所有现有路径。显示多个路径不匹配的错误。 不是一对一的json路径匹配。

  • org.assertj.core.api.SoftAssertions - 也不是解决方案,因为很难从消息中了解哪些 Assets 失败了。

  • harcrest allOf/anyOf 也不是解决方案,因为它在第一个匹配的断言上失败,而不是组合它们。

  • P.S. 欢迎任何有关 json diff 可视化的建议。理想的方式看起来像 this 。 (但这是在 JavaScript 中)

    最佳答案

    首先,接受以下内容:

    1. JSON 是键值对的无序集合。
    2. 很难比较任何无序集合。
    3. 如果您对键值对进行排序(按键排序)并将 JSON 值表示为字符串(例如:"{\"keyA\":\"blam\",\"keyB\":\"kapow\"}") 您可以使用字符串比较来比较 JSON 值。

    我将 JSON 的排序形式称为“规范 JSON 形式”。

    一旦您接受上述内容为真实和/或真实,这成为您问题的解决方案:

    1. 创建一个接受 JSON 并输出规范 JSON 形式的工具(可能是单个类)(这是此解决方案的重要部分):
    2. 获取两个 JSON 值的规范 JSON 表单。
    3. 使用 assertEquals 比较规范的 JSON 形式。

    关于java - 如何通过单次比较比较 2 个 json 过滤器和多个 json 路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55957069/

    31 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com