当前位置: 首页 > 知识库问答 >
问题:

用于选择JSON对象数组中字段的值的RESS保证正确的JsonPath get()格式是什么

刘胜泫
2023-03-14

我正在使用rest assured进行API post调用,并在体内得到响应。然后,我需要接受这个响应,选择特定的字段值,并将它们存储为字符串,以便稍后与其他字符串对象进行比较。我很好地编写了jsonpath来获取顶级字段值(如id、status、type、country等),但当我必须进入返回的json数组中的一个对象时,我无法正确获取get()方法的格式。

下面是返回的Json示例:

{
  "id": "ABC123",
  "status": "NEW",
  "type": "PERSONAL",
  "country": "United States",
  "totalBalances": {},
  "availableBalances": {},
  "fields": [
    {
      "fieldType": "mobilephone",
      "value": "14216904425",
      "fieldId": "personalMobileNumber"
    },
    {
      "fieldType": "email",
      "value": "user12345@work.com",
      "fieldId": "personalEmail"
    },
    {
      "fieldType": "STRING",
      "value": "John Doe",
      "fieldId": "individualName"
    }
  ]
}

下面是我试图格式化以适应get()方法的json路径,但我每次都得到一个非法参数异常(java.lang.IllegalArgumentException:无效的json表达式),我试图使它工作。基本上,我需要在数组中识别正确的对象,并获取适当的字段值。在本例中,这是fieldId字段,我需要字段“value”值(John Doe),以便将其保存到String对象中:

JsonPath pathToAccountName = response.jsonPath();
String accountName = pathToAccountName.get("fields[?(@.fieldId=='individualName')].value")

我使用https://jsonpath.curiousconcept.com/获取有效的json路径:

$.fields[?(@.fieldId=='individualName')].value

但是我想尽办法把它转换成get()方法可以接受的东西,但没有运气。在这里搜索所有的帖子和放心技术文档也没有帮助。

共有1个答案

程智明
2023-03-14

Rest Assured使用Groovy的GPath。因此您的查询可能如下所示:

JsonPath pathToAccountName = response.jsonPath();
String value = jsonPath.getString("fields.find { it.fieldId == 'individualName' }.value");

在这里可以找到一些示例(它是关于处理XML,但也适用于JSON):http://groovy-lang.org/processing-xml.html

 类似资料:
  • 我有点迷失了JSON格式,我必须返回Select2才能正常工作。 我返回的JSON用fiddler捕获: 和我的Select2设置(#FuncionarioID是一个选择输入): }); 我一直在Stackoverflow阅读关于同一主题的问题,我尝试了答案,但没有一个对我有用。关于解决这个问题,你有什么建议吗?我已经尝试返回像这样的对象{“id”:“1060”,“text”:“teste1”},

  • 我见过很多不同的JSON日期格式标准: 哪一个是正确的?还是最好?这方面有什么标准吗?

  • 问题:有时访问请求目标是单个目标,有时是数组 问题:如何根据找到的内容将Jackson反序列化为单个目标或数组? 单目标JSON 目标JSON数组 “目标”POJO: })@生成(“jsonSchema2pojo”)公共类目标实现可序列化{ }

  • 我对. NET/C#的留档感到困惑,关于关键字vs/和。我试图了解易失性字段的确切保证以及这些方法到底在做什么。 我认为volatile提供了发布/获取语义,但它提供了线程的文档。VolatileRead让我怀疑自己的理解是否正确。 这是volatile的语言参考:https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/k

  • 我有一个关于bean的正确格式和用法的问题。xml文件。在我的项目中,我通常将这些内容用于我的bean。xml文件(未使用explizit bean声明): 这在WildFly 8和9中运行得很好。但是我在GlassFish 4中有部署问题。在问题中:Glassfish 4,CDI中的简单示例在WELD-001408中失败。我写了一个替代格式: 这里使用了不同的名称空间。GlassFish4似乎很

  • 我正在Windows Server 2016上运行的Jenkins 2.152中创建一个作业,该作业需要从bitbucket上托管的git repo中提取。组织。我通过GitBash测试了ssh密钥,因此我知道它可以工作,并且没有密码短语。当我尝试使用与Jenkins相同的私钥时,会收到一条错误消息。 全权证书设置为 我注意到在另一台Windows Jenkins服务器上,私钥每行的字符数不同 有