arrays - 如何为复杂的 JSON 数组应用 if-else
问题描述
这是示例 Json:-
[
{
"index": 0,
"object": {
"uri": "entities/oAFpSUX",
"type": "configuration/entityTypes/Pet",
"createdBy": "abc@xyz.com",
"createdTime": 1531431176965,
"updatedBy": "abc@xyz.com",
"updatedTime": 1531431177691,
"attributes": {
"Weight": [
{
"label": "5 lbs",
"value": {
"PetWeightMeasurement": [
{
"ov": true,
"value": "5",
}
],
"PetWeightUOM": [
{
"ov": true,
"value": "lbs",
"lookupCode": "lbs",
}
]
},
"ov": true,
"uri": "entities/oAFpSUX/attributes/Weight/1AeFvD8Kj"
}
],
"Identifiers": [
{
"label": "5155445576",
"value": {
"Type": [
{
"ov": false,
"value": "CRMO_Pet_Id",
}
],
"ID": [
{
"ov": true,
"value": "5155445576",
}
]
},
"ov": true,
"uri": "entities/oAFpSUX/attributes/Identifiers/1AeFvCrHh"
}
],
"Vaccination": [
{
"label": "Bordatella - 2018-10-26",
"value": {
"Type": [
{
"type": "configuration/entityTypes/Pet/attributes/Vaccination/attributes/Type",
"ov": true,
"value": "Bordatella",
"lookupCode": "4",
"lookupRawValue": "Bordatella",
"lookupAttributes": [
{
"name": "Sort Order",
"value": "3"
}
],
"uri": "entities/oAFpSUX/attributes/Vaccination/1AeFv9yGr/Type/1AeFvA2X7"
}
],
"ExpirationDate": [
{
"type": "configuration/entityTypes/Pet/attributes/Vaccination/attributes/ExpirationDate",
"ov": true,
"value": "2018-10-26",
"uri": "entities/oAFpSUX/attributes/Vaccination/1AeFv9yGr/ExpirationDate/1AeFvA6nN"
}
]
},
"ov": true,
"uri": "entities/oAFpSUX/attributes/Vaccination/1AeFv9yGr"
},
{
"label": "Distemper - 2018-10-25",
"value": {
"Type": [
{
"type": "configuration/entityTypes/Pet/attributes/Vaccination/attributes/Type",
"ov": true,
"value": "Distemper",
"lookupAttributes": [
{
"name": "Sort Order",
"value": "4"
}
],
"uri": "entities/oAFpSUX/attributes/Vaccination/1AeFv9YhJ/Type/1AeFv9cxZ"
}
],....
我的问题:我能够将“$..Vaccination..value.Type..value”的值设为“Bordatella”,这样可以正常工作。但是我现在想要的是,如果值为“Bordatella”,那么我想提取“ExpirationDate”下的“值”。有人可以帮我如何在“ExpirationDate”下提取“价值”吗?我不确定是否需要使用一些使用 jmeter 的 if 控制器的自定义 Groovy 代码来做到这一点。任何帮助将不胜感激!
谢谢。
解决方案
有几种方法可以在 Java中运行jq查询 - 例如
- https://github.com/eiiches/jackson-jq
- https://github.com/arakelian/java-jq(可从 Maven 中心获得)
- Java Native Access 包装器https://github.com/bskaggs/jjq。支持的平台仅限 Linux。
假设样本输入已经以明显的方式进行了修改以使其成为有效的 JSON,以下 jq 过滤器将产生如下所示的输出:
.[].object.attributes.Vaccination[].value
| select(.Type[].value == "Bordatella")
| .ExpirationDate[].value
输出:
"2018-10-26"
选择
这是一个 jq 过滤器,它与“疫苗接种”对象的相对位置无关:
..
| objects
| select(has("Vaccination"))
| .Vaccination[].value?
| select(.Type[].value == "Bordatella")
| .ExpirationDate[].value
推荐阅读
- javascript - 关联属性不适用于 node.js
- powershell - 如何替换字符串中的 $(data)?
- java - 如何让 ImageIcon 在所有平台上工作
- mysql - XAMPP 无法开始运行 MySQL
- c - Volatile int vs int 变量效应
- http - 我想在 Elm 中初始化函数
- flutter - 什么主题元素控制 TextField 小部件的焦点颜色
- angular - Angular 8 - 如何拦截来自(rxjs)的http错误?
- ios - 如何从 AppDelegate 显示 iOS 13 SwiftUI 视图?
- laravel - Laravel:如何检查数组是否为空?