在选择JSON对象数组中的字段值时,可以确保使用JsonPath get()格式正确的是什么

时间:2019-02-25 08:04:28

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

我很放心地进行API调用,并在体内获得响应。然后,我需要采取此响应并选择特定的字段值,并将其存储为字符串,以便以后与其他字符串对象进行比较。我写jsonpath很好,以获得顶级字段值(例如id,状态,类型,国家等),但是当我必须进入返回的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路径,但是我每次都尝试使它工作,但每次都会收到一个Illegal Argument异常(java.lang.IllegalArgumentException:无效的JSON表达式)。基本上,我需要在数组中标识正确的对象并获取适当的字段值。在这种情况下,这是fieldId字段,我想要字段“值”值(John Doe),以便可以将其保存到String对象:

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

我使用https://jsonpath.curiousconcept.com/来获取VALID json路径:

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

但是我尝试了一切将其转换为get()方法将接受并且没有运气的东西。清理这里的所有帖子以及放心的技术文档都没有帮助。

1 个答案:

答案 0 :(得分:2)

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

./data.txt 24589

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