如何在JMeter中将JSON数组对象解析为字符串数组对象

时间:2020-07-06 05:27:53

标签: arrays json jmeter

我有以下JSON。我想将technicalSettings的JSON数组对象(在这种情况下为两个对象,但可以根据API响应而变化)成一个字符串数组而不丢失任何文本,并且想遍历该字符串数组以添加更多元素并形成一个新的JSON并将新的JSON存储在字符串变量中。

{
  "data": {
    "statusCode": 200,
    "success": true,
    "technicalSettings": [
      {
        "program": "C:/temp/abc.exe",
        "actions": "9",
        "file_name": "abc1",
        "new_file_name": "newabc1",
        "version": "2.0.0.0",
        "product_name": "abc",
        "description": "abc",
        "eventdate": "20160601120000",
        "autoVoiceProfile": {
              "autoVoices": [
                {
                  "autoVoiceLanguage": 0,
                  "autoVoiceMessage": [
                    {
                      "name": "AV1",
                      "duration": "1.200000",
                      "checksum": "2d4c44d142bc0391b980b8a103ab35cc23d8f7820895cb6025cf3c829139336c",
                      "fileName": "/usr/g/db/user_autoVoiceMsg7.aifc",
                      "id": 4
                    },
                    {
                      "name": "AV1",
                      "duration": "0.600000",
                      "checksum": "9538cf287d178964dcb57a05b7acbc00e04c800a9aaed0b22f5433d9dc79d80c",
                      "fileName": "/usr/g/db/user_autoVoiceMsg8.aifc",
                      "id": 4
                    },
                    {
                      "name": "AV2",
                      "duration": "2.800000",
                      "checksum": "050acdb345e079da1371623c9727bc16d166db0a0b47687ff93d736ddf37cde8",
                      "fileName": "/usr/g/db/user_autoVoiceMsg9.aifc",
                      "id": 5
                    },
                    {
                      "name": "AV2",
                      "duration": "4.100000",
                      "checksum": "c5a6a39df38505c0c22b75d9ea7781a1755e9c8c9f435e08034f579361ba751c",
                      "fileName": "/usr/g/db/user_autoVoiceMsg10.aifc",
                      "id": 5
                    }
                  ]
                }
              ],
              "messagesitefilename": null
            }
        
      },
      {
        "program": "C:/temp/abc.exe",
        "actions": "9",
        "file_name": "abc2",
        "new_file_name": "newabc2",
        "version": "2.0.0.0",
        "product_name": "abc",
        "description": "abc",
        "eventdate": "20160601120000",
        "autoVoiceProfile": {
              "autoVoices": [
                {
                  "autoVoiceLanguage": 0,
                  "autoVoiceMessage": [
                    {
                      "name": "AV1",
                      "duration": "1.200000",
                      "checksum": "2d4c44d142bc0391b980b8a103ab35cc23d8f7820895cb6025cf3c829139336c",
                      "fileName": "/usr/g/db/user_autoVoiceMsg7.aifc",
                      "id": 4
                    },
                    {
                      "name": "AV1",
                      "duration": "0.600000",
                      "checksum": "9538cf287d178964dcb57a05b7acbc00e04c800a9aaed0b22f5433d9dc79d80c",
                      "fileName": "/usr/g/db/user_autoVoiceMsg8.aifc",
                      "id": 4
                    },
                    {
                      "name": "AV2",
                      "duration": "2.800000",
                      "checksum": "050acdb345e079da1371623c9727bc16d166db0a0b47687ff93d736ddf37cde8",
                      "fileName": "/usr/g/db/user_autoVoiceMsg9.aifc",
                      "id": 5
                    }
                  ]
                }
              ],
              "messagesitefilename": null
            }
      }
    ],
    "library": {
      "version": 6,
      "dmIdVersion": 5
    }
  },
  "success": true,
  "statusCode": 200,
  "errorMessage": ""
}

我使用了JSON提取器,但由于数组对象包含多个“,”,因此拆分为数组时失败。

String strPublishTechSettings =“ $ {pPublishTechSettings_ALL}”;

String [] PublishTechSettings = strPublishTechSettings.split(“,”);

enter image description here

1 个答案:

答案 0 :(得分:0)

不要将JMeter Functions or Variables内联为以下脚本:

  • 如果启用了编译缓存,则所有迭代仅使用第一个值
  • 它与Groovy GString Template Feature冲突
  • 可能会解决导致编译失败或意外行为的问题

因此更改此行:

String strPublishTechSettings = "${pPublishTechSettings_ALL}";

对此:

String strPublishTechSettings = "${pPublishTechSettings_ALL}";

,您的测试应会按预期开始工作enter image description here

在上面的示例中,vars代表JMeterVariables类实例,有关所有可用函数,请参见JavaDoc,有关{J3223测试元素可用的其他JMeter API速记的更多信息,请参见Top 8 JMeter Java Classes You Should Be Using with Groovy文章。 >