0

I am trying to get (via JSON Path) only key values from the JSON below but with no success.

I cannot use the tilde sign (~) because JMeter's JSON Path Extractor works under JSON PATH 4.0 and ~ is not recognized.

{
    "facetCount": {
        "designer": {
            "4856430": 2,
            "7313551": 14,
            "7018102": 8,
            "306838": 1,
            "85146": 146,
            "2654979": 11,
            "221111": 4,
            "180510": 40,
            "3344622": 59,
            "472718": 73,
            "107993": 19,
            "166170": 58,
            "6908": 2,
            "426629": 1,
            "1358858": 9,
            "9879178": 6,
            "55006": 43,
            "285396": 2,
            "3355": 9,
            "215501": 8,
            "4968477": 4,
            "11349629": 7,
            "11229643": 27,
            "11355128": 9,
            "7093068": 3,
            "11098281": 2,
            "5833751": 1,
            "4741301": 1,
            "9198104": 21,
            "991324": 4
        },
        "attributes": {
            "135979:77": 290,
            "135979:83": 27,
            "136227:20": 141,
            "136227:78": 670,
            "135985:44": 123,
            "135985:43": 669,
            "135979:62": 700,
            "135979:61": 1188,
            "136644:176": 2,
            "136331:7": 1,
            "136331:8": 3,
            "136641:190": 13,
            "136641:191": 12,
            "136061:144": 3
        },
        "category": {
            "136103": 208,
            "136105": 147,
            "137322": 2,
            "136389": 120,
            "136215": 236,
            "136214": 954,
            "136216": 217,
            "136217": 352,
            "136218": 452,
            "136219": 40,
            "136480": 4,
            "136220": 111,
            "136221": 288,
            "136222": 58,
            "136223": 369,
            "136224": 163,
            "136986": 3,
            "136307": 1125,
            "136059": 10,
            "136308": 956,
            "136315": 984,
            "136003": 574,
            "136045": 267,
            "136035": 1501,
            "135985": 1380,
            "137134": 27,
            "136309": 60,
            "137323": 9,
            "136390": 1,
            "136021": 16,
            "136322": 1951,
            "137166": 16,
            "137317": 7,
            "136005": 4,
            "135983": 4019,
            "136033": 1513,
            "136310": 1224,
            "136392": 18,
            "135981": 2430,
            "136031": 16,
            "136326": 1312,
            "136061": 79
        },
        "colour": {
            "1": 41686,
            "7": 14593,
            "5": 9596,
            "18": 1,
            "13": 5185,
            "6": 5259,
            "3": 6391,
            "11": 5715,
            "12": 1537,
            "4": 8767,
            "16": 1466,
            "9": 8590,
            "15": 1730,
            "8": 8333,
            "14": 3208,
            "2": 13269,
            "10": 2730
        },
        "ninetyminutes": {
            "3": 309
        },
        "sameday": {
            "3": 1714,
            "42": 254
        },
        "size": {
            "135972:1620": 523,
            "136657:2650": 1,
            "136657:2850": 1
        },
        "location": {
            "3": 2674,
            "4": 7671,
            "5": 35808,
            "6": 2761,
            "7": 11948
        },
        "labels": {
            "1300": 2969
        }
    }
}

I would like to get the keys that are under facetCount element (designers, attributes, colour, etc.) and also (another JSON Path expression) get the keys that are inside these keys, such as 4856430 from designers, 135979:77 from attributes, and so on.

Could you help me, please?

Thanks in advance!

2 Answers2

1

You can use JSR223 PostProcessor to get key in object JSON

 new groovy.json.JsonSlurper().parse(prev.getResponseData()).facetCount.eachWithIndex{ def node, int idx ->
    log.info('Key ' + idx + '=' + node.getKey())
    vars.put('key_' + idx, node.getKey())
}

And you can get key with a variable like that:

${key_0}, ${key_1}, ...

More detail check here How to extract values from json in jmeter when the keys are unkown?

Sinh Vien IT
  • 113
  • 2
  • 13
0

JMeter's JSON test elements rely on Jayway Jsonpath which doesn't has this tilde operator for querying the keys, you will have to go for:

Add JSR223 PostProcessor as a child of the request which returns the above JSON and use the following code:

  1. For direct keys (designer, attributes, etc)

    def counter = 1
    new groovy.json.JsonSlurper().parse(prev.getResponseData()).facetCount.each { facet ->
        vars.put('key_' + counter, facet.key)
        counter++
    }
    vars.put('key_matchNr', counter - 1 as String)
    
  2. For child keys (4856430, 135979:77, etc)

    def counter = 1
    new groovy.json.JsonSlurper().parse(prev.getResponseData()).facetCount.each { child ->
        child.value.keySet().each { key ->
            vars.put('childKey_' + counter, key)
            counter++
        }
    }
    vars.put('childKey_matchNr', counter -1 as String)
    

More information: Groovy - Parsing and producing JSON

Dmitri T
  • 159,985
  • 5
  • 83
  • 133