如何对复杂的JSON数组应用if-else

时间:2018-07-12 23:17:19

标签: arrays json if-statement jmeter

这是示例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”下的“ value”。有人可以帮我如何在“ ExpirationDate”下提取该“值”吗?我不确定是否需要使用一些使用jmeter的if控制器的自定义Groovy代码来做到这一点。任何帮助将不胜感激!

谢谢。

2 个答案:

答案 0 :(得分:0)

有几种方法可以在Java内部运行jq查询,例如

假设已对示例输入进行了明显修改以使其有效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

答案 1 :(得分:0)

给出以下JSON响应:

[
  {
    "index": 0,
    "object": {
      "uri": "entities/oAFpSUX",
      "type": "configuration/entityTypes/Pet",
      "createdBy": "a...@xyz.com",
      "createdTime": 1531431176965,
      "updatedBy": "a...@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"
                }
              ]
            }
          }
        ]
      }
    }
  }
]
  1. JSR223 PostProcessor添加为返回上述响应的请求的子项
  2. 将以下代码放入“脚本”区域:

    new groovy.json.JsonSlurper().parse(prev.getResponseData()).get(0).get('object').get('attributes').get('Vaccination').each { vaccination ->
        if (vaccination.get('value').get('Type').get(0).get('value').equals('Bordatella')) {
            def expirationDate = vaccination.get('value').get('ExpirationDate').get(0).get('value')
            log.info('ExpirationDate: ' + expirationDate)
            vars.put('ExpirationDate', expirationDate)
        }
    }
    
  3. 如果一切顺利(您的JSON响应与Groovy代码匹配),ExpirationDate将为:

    • 打印到 jmeter.log 文件
    • 存储为${ExpirationDate} JMeter变量

演示:

JMeter Extract Value from JSON with Groovy

更多信息: