java - 什么是正确的 JsonPath get() 格式,用于选择 JSON 对象数组中的字段值
问题描述
我正在放心地进行 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 路径,但每次我都得到一个非法参数异常(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() 方法可以接受的东西,但没有运气。搜索这里的所有帖子和放心的技术文档也没有帮助。
解决方案
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
推荐阅读
- rest - Axon - 如何在 CommandHandler 中检索新的实体版本号?
- angular - 在 RxJS 中,错误回调与 .catch() 有什么区别?
- asp.net-mvc - 问题:部分视图 (PV) 页面显示在单个页面中,而不是在四 (4) 个 PV 页面中,尽管代码相同。需要将参数传递给 PV?
- angular - UI Router 2 在解决之前不等待订阅解决
- spring - Spring 5可以在没有控制器的情况下允许在jsp中进行POST吗?
- eclipse - Eclipse CDT 为 Docker 容器构建和启动应用程序
- node.js - 弹性搜索响应 JSON 清理
- matlab - 盈透证券和 MATLAB 连接
- r - 在shinyapp中带有来自网络的图像的LaTeX PDF
- c# - 使用 LINQ 查询 Azure MobileServiceSyncTable