【问题标题】:RestAssured JsonPath: How to filter json objects from jsonRestAssured JsonPath:如何从 json 中过滤 json 对象
【发布时间】:2016-12-19 12:52:19
【问题描述】:

我正在尝试从 json 文件中获取一组对象,但我遇到了问题。

path.get("wgcTournaments.items")

我应该使用什么路径来获取项目中的所有项目(项目 0、项目 1、项目 2 ...)?

你能给我一个建议吗?

Json 示例

{
  "wgcTournaments": {
    "items": {
      "jcr:primaryType": "nt:unstructured",
      "item0": {
        "jcr:primaryType": "nt:unstructured",
        "test": "test",
        "test1": "test1"
      },
      "item1": {
        "jcr:primaryType": "nt:unstructured",
        "test": "test",
        "test1": "test1"
      },
      "item2": {
        "jcr:primaryType": "nt:unstructured",
        "test": "test",
        "test1": "test1"
      },
      "item3": {
        "jcr:primaryType": "nt:unstructured",
        "test": "test",
        "test1": "test1"
      }
    }
  }
}

从项目对象中过滤项目的最佳方法,但我不明白如何使用 json 路径进行操作。

【问题讨论】:

  • 您正在尝试获取 MyClass 对象数组,但在您的 JSON 中您有一个对象,而不是对象数组。
  • AntoineB 我想得到一个由 item0、item1、item2 组成的数组,看起来它们是一个对象数组
  • 看看我回答的最后一部分。

标签: java rest-assured rest-assured-jsonpath


【解决方案1】:

我终于找到了我的问题的解决方案。

如果你想从物品中获取物品你需要使用这个json路径

path.getObject("wgcTournaments.items*.
find{it.key.startsWith('item')}.value",ItemClass[].class);

注意: 这是 RestAssured,他使用 Gpath 更多详细信息,您可以在此处找到 http://docs.groovy-lang.org/latest/html/documentation/#_gpath

【讨论】:

    【解决方案2】:

    您正试图将一个对象反序列化为一个对象数组。您的代码或 JSON(很可能)是错误的。

    如果你想将items反序列化为一个数组,你的JSON应该如下:

    {
      "wgcTournaments": {
        "items": [
            {
              "jcr:primaryType": "nt:unstructured",
              "item0": {},
              "item1": {},
              "item2": {},
              "item3": {}
            }
        ]
      }
    }
    

    否则,如果您的 JSON 是正确的,您应该使用以下行反序列化您的 JSON:

    path.getObject("wgcTournaments.items", MyClass.class)
    

    编辑:编辑后,这似乎是您想要的:

    如果您的 JSON 正确并且您确实需要一个数组,我假设每个 itemX 是一个键,{} 是相应的值。在这种情况下,您必须知道在 JSON 中不能有关联数组,您应该使用自定义解决方案对其进行反序列化,因为您的关联数组将被转换为对象。

    【讨论】:

    • 你能建议我如何从带有 json 路径的项目中获取所有项目吗?也许像 wgcTournaments.items.findAll {item ...}
    • 无法直接获取。你也许可以声明一个转换器之类的东西来处理数据,但你必须寻找如何去做,我对它不是很有经验。
    • 对不起,我编辑了问题,我需要一个 json 路径而不是转换它的方法。
    • 那我不认为你可以,如果你的 JSON 不是我相信的数组,你就无法获得数组的路径。
    猜你喜欢
    • 2018-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-08
    • 2019-05-08
    • 2023-02-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多