В настоящее время я пытаюсь извлечь идентификатор поля из ответа Vaadin json, чтобы обнаружить все поля со списком (RTFComboBox) и обработать их дальше. Пример ответа (урезано):
for(;;);[{
"syncId": 113,
"clientId": 113,
"changes": [],
"state": {
"1273": {
"caption": "",
"styles": ["tokenfield", "tokentextfield"]
},
"1274": {
"styles": ["RTFTokenField"]
},
"1275": {
"width": "185.0px",
"immediate": true,
"styles": ["RTFTokenField", "RTFComboBox", "tiny"],
"registeredEventListeners": ["focus"]
}
}
}]
Мне нужно получить номер идентификатора (здесь 1275), я могу иметь дело с мусором «for (;;)», но не могу извлечь правильные значения идентификатора. Я пытался использовать Regex Extractor, но это решение не очень гибкое (или я просто не могу написать правильное выражение).
Есть идеи, как получить родительский идентификатор, когда дочерний массив стилей содержит RTFComboBox? Может быть, здесь требуется какое-то более сложное решение, например какой-нибудь скрипт на Groovy, чем JSON Extractor от JMeter?
2 ответа
Я бы посоветовал написать отличный скрипт в процессоре beanshell, проанализировать JSON и затем получить все ключи для объекта состояния. Вот фрагмент кода, убедитесь, что вы добавили java-json.jar в папку JMETER_HOME / lib
try {
String jsonString = prev.getResponseDataAsString();
JSONArray jsonArray = new JSONArray(jsonString);
JSONObject object = jsonArray.getJSONObject(0);
JSONObject states = object.getJSONObject("state");
String keys[] = states.getNames(states);
for(int i=0; i< keys.length; i++) {
log.info(keys[i]);
}
} catch (JSONException e) {
e.printStackTrace();
}
Наконец-то я сделал это с помощью JsonSlurper, это мой скрипт JSR223 PostProcessor:
import groovy.json.JsonSlurper
def jsonSlurper = new JsonSlurper()
def response = jsonSlurper.parseText(prev.getResponseDataAsString().drop(8))
//drop to remove for(;;); junk preventing proper parse
def map = [:]
response.state[0].each {k, v -> if(v.styles != null && v.styles.contains("RTFComboBox")) {map.put(k, v)}}
//map contains key (field id-most important to me) and key (rest of values in node)
Если вам нужно какое-то конкретное значение, просто в строке map.put установите v.field, то есть:
map.put (k, v.immediate)
Похожие вопросы
Новые вопросы
json
JSON (объектная нотация JavaScript) - это сериализуемый формат обмена данными, предназначенный для машинного и человеческого чтения. Не используйте этот тег для собственных объектов JavaScript или литералов объектов JavaScript. Прежде чем задать вопрос, проверьте свой JSON с помощью валидатора JSON, такого как JSONLint (https://jsonlint.com).